diff options
Diffstat (limited to 'indra/newview')
40 files changed, 1215 insertions, 965 deletions
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index d98f0da1c2..4e666952ce 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -652,17 +652,6 @@        <key>Value</key>        <integer>1</integer>      </map> -  <key>AvatarPhysicsTest</key> -  <map> -    <key>Comment</key> -    <string>Simulate continuous physics behavior on all nearby avatars.</string> -    <key>Persist</key> -    <integer>1</integer> -    <key>Type</key> -    <string>Boolean</string> -    <key>Value</key> -    <integer>0</integer> -  </map>      <key>AvatarSex</key>      <map>        <key>Comment</key> @@ -12613,6 +12602,39 @@      <key>Value</key>      <integer>1</integer>    </map> +  <key>EnableInventory</key> +  <map> +    <key>Comment</key> +    <string>Enable opening inventory from web link</string> +    <key>Persist</key> +    <integer>1</integer> +    <key>Type</key> +    <string>Boolean</string> +    <key>Value</key> +    <integer>1</integer> +  </map> +  <key>EnableSearch</key> +  <map> +    <key>Comment</key> +    <string>Enable opening search from web link</string> +    <key>Persist</key> +    <integer>1</integer> +    <key>Type</key> +    <string>Boolean</string> +    <key>Value</key> +    <integer>1</integer> +  </map> +  <key>EnableAppearance</key> +  <map> +    <key>Comment</key> +    <string>Enable opening appearance from web link</string> +    <key>Persist</key> +    <integer>1</integer> +    <key>Type</key> +    <string>Boolean</string> +    <key>Value</key> +    <integer>1</integer> +  </map>      <key>SearchFromAddressBar</key>      <map>        <key>Comment</key> diff --git a/indra/newview/app_settings/settings_minimal.xml b/indra/newview/app_settings/settings_minimal.xml index 490da2c9d4..bc97ec00e9 100644 --- a/indra/newview/app_settings/settings_minimal.xml +++ b/indra/newview/app_settings/settings_minimal.xml @@ -303,6 +303,39 @@        <key>Value</key>        <integer>0</integer>      </map> +    <key>EnableInventory</key> +    <map> +      <key>Comment</key> +      <string>Enable opening inventory from web link</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map> +    <key>EnableSearch</key> +    <map> +      <key>Comment</key> +      <string>Enable opening search from web link</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map> +    <key>EnableAppearance</key> +    <map> +      <key>Comment</key> +      <string>Enable opening appearance from web link</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map>      <key>DoubleClickShowWorldMap</key>      <map>        <key>Comment</key> diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml index ec162e3608..ce15c4b8f7 100644 --- a/indra/newview/character/avatar_lad.xml +++ b/indra/newview/character/avatar_lad.xml @@ -4352,8 +4352,8 @@       wearable="shape"       edit_group="driven"       value_default="0" -     value_min="-1.5" -     value_max="1.5"> +     value_min="-1.25" +     value_max="1.25">        <param_morph />      </param> @@ -11875,7 +11875,7 @@ render_pass="bump">       edit_group="physics_advanced"       value_default="0"       value_min="0" -     value_max=".1"> +     value_max="30">  	 <param_driver />      </param> @@ -11887,9 +11887,9 @@ render_pass="bump">       label="Breast Physics Drag"       wearable="physics"       edit_group="physics_advanced" -     value_default=".15" +     value_default="1"       value_min="0" -     value_max=".5"> +     value_max="10">  	 <param_driver />      </param> @@ -11914,9 +11914,9 @@ render_pass="bump">       label="Breast Physics UpDown Spring"       wearable="physics"       edit_group="physics_breasts_updown" -     value_default=".1" +     value_default="10"       value_min="0" -     value_max="3"> +     value_max="100">  	 <param_driver />      </param>      <param @@ -11940,11 +11940,9 @@ render_pass="bump">       label="Breast Physics UpDown Damping"       wearable="physics"       edit_group="physics_breasts_updown" -     value_default=".05" +     value_default=".2"       value_min="0" -     value_max=".1" -     camera_elevation=".3" -     camera_distance=".8"> +     value_max="1">  	 <param_driver />      </param> @@ -11969,9 +11967,9 @@ render_pass="bump">       label="Breast Physics InOut Spring"       wearable="physics"       edit_group="physics_breasts_inout" -     value_default=".1" +     value_default="10"       value_min="0" -     value_max="3"> +     value_max="100">  	 <param_driver />      </param>      <param @@ -11995,9 +11993,9 @@ render_pass="bump">       label="Breast Physics InOut Damping"       wearable="physics"       edit_group="physics_breasts_inout" -     value_default=".05" +     value_default=".2"       value_min="0" -     value_max=".1"> +     value_max="1">  	 <param_driver />      </param> @@ -12022,7 +12020,7 @@ render_pass="bump">       edit_group="physics_advanced"       value_default="0"       value_min="0" -     value_max=".1"> +     value_max="30">  	 <param_driver />      </param>     <param @@ -12032,9 +12030,9 @@ render_pass="bump">       label="Belly Physics Drag"       wearable="physics"       edit_group="physics_advanced" -     value_default=".15" +     value_default="1"       value_min="0" -     value_max=".5"> +     value_max="10">  	 <param_driver />      </param>     <param @@ -12056,9 +12054,9 @@ render_pass="bump">       label="Belly Physics UpDown Spring"       wearable="physics"       edit_group="physics_belly_updown" -     value_default=".1" +     value_default="10"       value_min="0" -     value_max="3"> +     value_max="100">  	 <param_driver />      </param>      <param @@ -12080,9 +12078,9 @@ render_pass="bump">       label="Belly Physics UpDown Damping"       wearable="physics"       edit_group="physics_belly_updown" -     value_default=".05" +     value_default=".2"       value_min="0" -     value_max=".1"> +     value_max="1">  	 <param_driver />      </param> @@ -12107,7 +12105,7 @@ render_pass="bump">       edit_group="physics_advanced"       value_default="0"       value_min="0" -     value_max=".1"> +     value_max="30">  	 <param_driver />      </param>     <param @@ -12117,9 +12115,9 @@ render_pass="bump">       label="Butt Physics Drag"       wearable="physics"       edit_group="physics_advanced" -     value_default=".15" +     value_default="1"       value_min="0" -     value_max=".5"> +     value_max="10">  	 <param_driver />      </param> @@ -12142,9 +12140,9 @@ render_pass="bump">       label="Butt Physics UpDown Spring"       wearable="physics"       edit_group="physics_butt_updown" -     value_default=".1" +     value_default="10"       value_min="0" -     value_max="3"> +     value_max="100">  	 <param_driver />      </param>      <param @@ -12166,9 +12164,9 @@ render_pass="bump">       label="Butt Physics UpDown Damping"       wearable="physics"       edit_group="physics_butt_updown" -     value_default=".05" +     value_default=".2"       value_min="0" -     value_max=".1"> +     value_max="1">  	 <param_driver />      </param> @@ -12191,9 +12189,9 @@ render_pass="bump">       label="Butt Physics LeftRight Spring"       wearable="physics"       edit_group="physics_butt_leftright" -     value_default=".1" +     value_default="10"       value_min="0" -     value_max="3"> +     value_max="100">  	 <param_driver />      </param>      <param @@ -12215,9 +12213,9 @@ render_pass="bump">       label="Butt Physics LeftRight Damping"       wearable="physics"       edit_group="physics_butt_leftright" -     value_default=".05" +     value_default=".2"       value_min="0" -     value_max=".1"> +     value_max="1">  	 <param_driver />      </param> @@ -12242,9 +12240,9 @@ render_pass="bump">       label="Breast Physics LeftRight Spring"       wearable="physics"       edit_group="physics_breasts_leftright" -     value_default=".1" +     value_default="10"       value_min="0" -     value_max="3"> +     value_max="100">  	 <param_driver />      </param>      <param @@ -12268,9 +12266,9 @@ render_pass="bump">       label="Breast Physics LeftRight Damping"       wearable="physics"       edit_group="physics_breasts_leftright" -     value_default=".05" +     value_default=".2"       value_min="0" -     value_max=".1"> +     value_max="1">  	 <param_driver />      </param> diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt index 15ad330418..af2d951bf7 100644 --- a/indra/newview/featuretable.txt +++ b/indra/newview/featuretable.txt @@ -132,7 +132,7 @@ list High  RenderAnisotropic			1	1  RenderAvatarCloth			1	0  RenderAvatarLODFactor		1	1.0 -RenderAvatarPhysicsLODFactor 1	0.9 +RenderAvatarPhysicsLODFactor 1	1.0  RenderAvatarVP				1	1  RenderFarClip				1	128  RenderFlexTimeFactor		1	1.0 diff --git a/indra/newview/featuretable_linux.txt b/indra/newview/featuretable_linux.txt index a2cd4b834c..5da1495da9 100644 --- a/indra/newview/featuretable_linux.txt +++ b/indra/newview/featuretable_linux.txt @@ -26,6 +26,7 @@ list all  RenderAnisotropic			1	1  RenderAvatarCloth			1	1  RenderAvatarLODFactor		1	1.0 +RenderAvatarPhysicsLODFactor 1	1.0  RenderAvatarMaxVisible      1   12  RenderAvatarVP				1	1  RenderCubeMap				1	1 @@ -70,6 +71,7 @@ list Low  RenderAnisotropic			1	0  RenderAvatarCloth			1	0  RenderAvatarLODFactor		1	0 +RenderAvatarPhysicsLODFactor 1	0  RenderAvatarMaxVisible      1   3  RenderAvatarVP				1	0  RenderFarClip				1	64 @@ -100,6 +102,7 @@ list Mid  RenderAnisotropic			1	0  RenderAvatarCloth			1	0  RenderAvatarLODFactor		1	0.5 +RenderAvatarPhysicsLODFactor 1	0.75  RenderAvatarVP				1	1  RenderFarClip				1	96  RenderFlexTimeFactor		1	1.0 @@ -128,6 +131,7 @@ list High  RenderAnisotropic			1	1  RenderAvatarCloth			1	0  RenderAvatarLODFactor		1	1.0 +RenderAvatarPhysicsLODFactor 1	1.0  RenderAvatarVP				1	1  RenderFarClip				1	128  RenderFlexTimeFactor		1	1.0 @@ -156,6 +160,7 @@ list Ultra  RenderAnisotropic			1	1  RenderAvatarCloth			1	1  RenderAvatarLODFactor		1	1.0 +RenderAvatarPhysicsLODFactor 1	1.0  RenderAvatarVP				1	1  RenderFarClip				1	256  RenderFlexTimeFactor		1	1.0 diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt index 3ad7f4e892..421f9c0973 100644 --- a/indra/newview/featuretable_mac.txt +++ b/indra/newview/featuretable_mac.txt @@ -26,6 +26,7 @@ list all  RenderAnisotropic				1	0  RenderAvatarCloth				0	0  RenderAvatarLODFactor			1	1.0 +RenderAvatarPhysicsLODFactor 1	1.0  RenderAvatarMaxVisible          1   12  RenderAvatarVP					1	0  RenderCubeMap					1	1 @@ -70,6 +71,7 @@ list Low  RenderAnisotropic			1	0  RenderAvatarCloth			1	0  RenderAvatarLODFactor		1	0 +RenderAvatarPhysicsLODFactor 1	0  RenderAvatarMaxVisible      1   3  RenderAvatarVP				1	0  RenderFarClip				1	64 @@ -99,6 +101,7 @@ list Mid  RenderAnisotropic			1	0  RenderAvatarCloth			1	0  RenderAvatarLODFactor		1	0.5 +RenderAvatarPhysicsLODFactor 1	0.75  RenderAvatarVP				1	1  RenderFarClip				1	96  RenderFlexTimeFactor		1	1.0 @@ -126,6 +129,7 @@ list High  RenderAnisotropic			1	1  RenderAvatarCloth			1	0  RenderAvatarLODFactor		1	1.0 +RenderAvatarPhysicsLODFactor 1	1.0  RenderAvatarVP				1	1  RenderFarClip				1	128  RenderFlexTimeFactor		1	1.0 @@ -153,6 +157,7 @@ list Ultra  RenderAnisotropic			1	1  RenderAvatarCloth			1	1  RenderAvatarLODFactor		1	1.0 +RenderAvatarPhysicsLODFactor 1	1.0  RenderAvatarVP				1	1  RenderFarClip				1	256  RenderFlexTimeFactor		1	1.0 diff --git a/indra/newview/featuretable_xp.txt b/indra/newview/featuretable_xp.txt index 38e6bb1e5e..c2e5dfff9f 100644 --- a/indra/newview/featuretable_xp.txt +++ b/indra/newview/featuretable_xp.txt @@ -26,6 +26,7 @@ list all  RenderAnisotropic			1	1  RenderAvatarCloth			1	1  RenderAvatarLODFactor		1	1.0 +RenderAvatarPhysicsLODFactor 1	1.0  RenderAvatarMaxVisible      1   12  RenderAvatarVP				1	1  RenderCubeMap				1	1 @@ -71,6 +72,7 @@ list Low  RenderAnisotropic			1	0  RenderAvatarCloth			1	0  RenderAvatarLODFactor		1	0 +RenderAvatarPhysicsLODFactor 1	0  RenderAvatarMaxVisible      1   3  RenderAvatarVP				1	0  RenderFarClip				1	64 @@ -101,6 +103,7 @@ list Mid  RenderAnisotropic			1	0  RenderAvatarCloth			1	0  RenderAvatarLODFactor		1	0.5 +RenderAvatarPhysicsLODFactor 1	0.75  RenderAvatarVP				1	1  RenderFarClip				1	96  RenderFlexTimeFactor		1	1.0 @@ -129,6 +132,7 @@ list High  RenderAnisotropic			1	1  RenderAvatarCloth			1	0  RenderAvatarLODFactor		1	1.0 +RenderAvatarPhysicsLODFactor 1	1.0  RenderAvatarVP				1	1  RenderFarClip				1	128  RenderFlexTimeFactor		1	1.0 @@ -157,6 +161,7 @@ list Ultra  RenderAnisotropic			1	1  RenderAvatarCloth			1	1  RenderAvatarLODFactor		1	1.0 +RenderAvatarPhysicsLODFactor 1	1.0  RenderAvatarVP				1	1  RenderFarClip				1	256  RenderFlexTimeFactor		1	1.0 diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 1cf552e42c..f9e850899a 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -110,6 +110,12 @@ public:  	{  		// support secondlife:///app/appearance/show, but for now we just  		// make all secondlife:///app/appearance SLapps behave this way +		if (!LLUI::sSettingGroups["config"]->getBOOL("EnableAppearance")) +		{ +			LLNotificationsUtil::add("NoAppearance", LLSD(), LLSD(), std::string("SwitchToStandardSkinAndQuit")); +			return true; +		} +  		LLSideTray::getInstance()->showPanel("sidepanel_appearance", LLSD());  		return true;  	} diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 061ef7268e..9de2941c4a 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -3531,10 +3531,10 @@ bool LLAppViewer::initCache()  	LLAppViewer::getTextureCache()->setReadOnly(read_only) ;  	LLVOCache::getInstance()->setReadOnly(read_only); -	BOOL texture_cache_mismatch = FALSE ; +	bool texture_cache_mismatch = false;  	if (gSavedSettings.getS32("LocalCacheVersion") != LLAppViewer::getTextureCacheVersion())   	{ -		texture_cache_mismatch = TRUE ; +		texture_cache_mismatch = true;  		if(!read_only)   		{  			gSavedSettings.setS32("LocalCacheVersion", LLAppViewer::getTextureCacheVersion()); @@ -3548,7 +3548,9 @@ bool LLAppViewer::initCache()  			gSavedSettings.getBOOL("PurgeCacheOnNextStartup"))  		{  			gSavedSettings.setBOOL("PurgeCacheOnNextStartup", false); -		mPurgeCache = true; +			mPurgeCache = true; +			// STORM-1141 force purgeAllTextures to get called to prevent a crash here. -brad +			texture_cache_mismatch = true;  		}  		// We have moved the location of the cache directory over time. diff --git a/indra/newview/lldateutil.cpp b/indra/newview/lldateutil.cpp index fcc73a07bc..18ae6107e7 100644 --- a/indra/newview/lldateutil.cpp +++ b/indra/newview/lldateutil.cpp @@ -32,9 +32,9 @@  #include "llui.h"  static S32 DAYS_PER_MONTH_NOLEAP[] = -	{ 31, 28, 21, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; +	{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };  static S32 DAYS_PER_MONTH_LEAP[] = -	{ 31, 29, 21, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; +	{ 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };  static S32 days_from_month(S32 year, S32 month)  { diff --git a/indra/newview/llfloaterimagepreview.cpp b/indra/newview/llfloaterimagepreview.cpp index c7fbdd5745..d76e7885bc 100644 --- a/indra/newview/llfloaterimagepreview.cpp +++ b/indra/newview/llfloaterimagepreview.cpp @@ -325,122 +325,51 @@ void LLFloaterImagePreview::draw()  bool LLFloaterImagePreview::loadImage(const std::string& src_filename)  {  	std::string exten = gDirUtilp->getExtension(src_filename); -	 -	U32 codec = IMG_CODEC_INVALID; -	std::string temp_str; -	if( exten == "bmp") -	{ -		codec = IMG_CODEC_BMP; -	} -	else if( exten == "tga") -	{ -		codec = IMG_CODEC_TGA; -	} -	else if( exten == "jpg" || exten == "jpeg") -	{ -		codec = IMG_CODEC_JPEG; -	} -	else if( exten == "png" ) -	{ -		codec = IMG_CODEC_PNG; -	} +	U32 codec = LLImageBase::getCodecFromExtension(exten);  	LLImageDimensionsInfo image_info; -	if(!image_info.load(src_filename,codec)) +	if (!image_info.load(src_filename,codec))  	{  		mImageLoadError = image_info.getLastError();  		return false;  	}  	S32 max_width = gSavedSettings.getS32("max_texture_dimension_X"); -	S32 max_heigh = gSavedSettings.getS32("max_texture_dimension_Y"); +	S32 max_height = gSavedSettings.getS32("max_texture_dimension_Y"); -	if(image_info.getWidth() > max_width|| image_info.getHeight() > max_heigh) +	if ((image_info.getWidth() > max_width) || (image_info.getHeight() > max_height))  	{  		LLStringUtil::format_map_t args;  		args["WIDTH"] = llformat("%d", max_width); -		args["HEIGHT"] = llformat("%d", max_heigh); +		args["HEIGHT"] = llformat("%d", max_height);  		mImageLoadError = LLTrans::getString("texture_load_dimensions_error", args);  		return false;  	} - +	// Load the image +	LLPointer<LLImageFormatted> image = LLImageFormatted::createFromType(codec); +	if (image.isNull()) +	{ +		return false; +	} +	if (!image->load(src_filename)) +	{ +		return false; +	} +	// Decompress or expand it in a raw image structure  	LLPointer<LLImageRaw> raw_image = new LLImageRaw; - -	switch (codec) +	if (!image->decode(raw_image, 0.0f))  	{ -	case IMG_CODEC_BMP: -		{ -			LLPointer<LLImageBMP> bmp_image = new LLImageBMP; - -			if (!bmp_image->load(src_filename)) -			{ -				return false; -			} -			 -			if (!bmp_image->decode(raw_image, 0.0f)) -			{ -				return false; -			} -		} -		break; -	case IMG_CODEC_TGA: -		{ -			LLPointer<LLImageTGA> tga_image = new LLImageTGA; - -			if (!tga_image->load(src_filename)) -			{ -				return false; -			} -			 -			if (!tga_image->decode(raw_image)) -			{ -				return false; -			} - -			if(	(tga_image->getComponents() != 3) && -				(tga_image->getComponents() != 4) ) -			{ -				tga_image->setLastError( "Image files with less than 3 or more than 4 components are not supported." ); -				return false; -			} -		} -		break; -	case IMG_CODEC_JPEG: -		{ -			LLPointer<LLImageJPEG> jpeg_image = new LLImageJPEG; - -			if (!jpeg_image->load(src_filename)) -			{ -				return false; -			} -			 -			if (!jpeg_image->decode(raw_image, 0.0f)) -			{ -				return false; -			} -		} -		break; -	case IMG_CODEC_PNG: -		{ -			LLPointer<LLImagePNG> png_image = new LLImagePNG; - -			if (!png_image->load(src_filename)) -			{ -				return false; -			} -			 -			if (!png_image->decode(raw_image, 0.0f)) -			{ -				return false; -			} -		} -		break; -	default:  		return false;  	} - +	// Check the image constraints +	if ((image->getComponents() != 3) && (image->getComponents() != 4)) +	{ +		image->setLastError("Image files with less than 3 or more than 4 components are not supported."); +		return false; +	} +	  	raw_image->biasedScaleToPowerOfTwo(1024);  	mRawImagep = raw_image; diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 1a9d0af9af..c7fce83b03 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -43,6 +43,7 @@  #include "llcombobox.h"  #include "llcommandhandler.h"  #include "lldirpicker.h" +#include "lleventtimer.h"  #include "llfeaturemanager.h"  #include "llfocusmgr.h"  //#include "llfirstuse.h" @@ -73,6 +74,7 @@  #include "llviewerwindow.h"  #include "llviewermessage.h"  #include "llviewershadermgr.h" +#include "llviewerthrottle.h"  #include "llvotree.h"  #include "llvosky.h" @@ -109,6 +111,7 @@  const F32 MAX_USER_FAR_CLIP = 512.f;  const F32 MIN_USER_FAR_CLIP = 64.f; +const F32 BANDWIDTH_UPDATER_TIMEOUT = 0.5f;  //control value for middle mouse as talk2push button  const static std::string MIDDLE_MOUSE_CV = "MiddleMouse"; @@ -286,8 +289,7 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)  	mOriginalIMViaEmail(false),  	mLanguageChanged(false),  	mAvatarDataInitialized(false), -	mDoubleClickActionDirty(false), -	mFavoritesRecordMayExist(false) +	mDoubleClickActionDirty(false)  {  	//Build Floater is now Called from 	LLFloaterReg::add("preferences", "floater_preferences.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreference>); @@ -412,6 +414,8 @@ BOOL LLFloaterPreference::postBuild()  	gSavedSettings.getControl("ChatFontSize")->getSignal()->connect(boost::bind(&LLNearbyChat::processChatHistoryStyleUpdate, _2)); +	gSavedSettings.getControl("ChatFontSize")->getSignal()->connect(boost::bind(&LLViewerChat::signalChatFontChanged)); +  	gSavedSettings.getControl("ChatBubbleOpacity")->getSignal()->connect(boost::bind(&LLFloaterPreference::onNameTagOpacityChange, this, _2));  	LLTabContainer* tabcontainer = getChild<LLTabContainer>("pref core"); @@ -565,34 +569,6 @@ void LLFloaterPreference::apply()  		updateDoubleClickSettings();  		mDoubleClickActionDirty = false;  	} - -	if (mFavoritesRecordMayExist && !gSavedPerAccountSettings.getBOOL("ShowFavoritesOnLogin")) -	{ -		removeFavoritesRecordOfUser();		 -	} -} - -void LLFloaterPreference::removeFavoritesRecordOfUser() -{ -	mFavoritesRecordMayExist = false; -	std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites.xml"); -	LLSD fav_llsd; -	llifstream file; -	file.open(filename); -	if (!file.is_open()) return; -	LLSDSerialize::fromXML(fav_llsd, file); -	 -	LLAvatarName av_name; -	LLAvatarNameCache::get( gAgentID, &av_name ); -	if (fav_llsd.has(av_name.getLegacyName())) -	{ -		fav_llsd.erase(av_name.getLegacyName()); -	} -	 -	llofstream out_file; -	out_file.open(filename); -	LLSDSerialize::toPrettyXML(fav_llsd, out_file); -  }  void LLFloaterPreference::cancel() @@ -678,11 +654,6 @@ void LLFloaterPreference::onOpen(const LLSD& key)  		getChildView("maturity_desired_combobox")->setVisible( false);  	} -	if (LLStartUp::getStartupState() == STATE_STARTED) -	{ -		mFavoritesRecordMayExist = gSavedPerAccountSettings.getBOOL("ShowFavoritesOnLogin"); -	} -  	// Forget previous language changes.  	mLanguageChanged = false; @@ -1558,10 +1529,56 @@ void LLFloaterPreference::setCacheLocation(const LLStringExplicit& location)  	cache_location_editor->setToolTip(location);  } +//------------------------------Updater--------------------------------------- + +static bool handleBandwidthChanged(const LLSD& newvalue) +{ +	gViewerThrottle.setMaxBandwidth((F32) newvalue.asReal()); +	return true; +} + +class LLPanelPreference::Updater : public LLEventTimer +{ + +public: + +	typedef boost::function<bool(const LLSD&)> callback_t; + +	Updater(callback_t cb, F32 period) +	:LLEventTimer(period), +	 mCallback(cb) +	{ +		mEventTimer.stop(); +	} + +	virtual ~Updater(){} + +	void update(const LLSD& new_value) +	{ +		mNewValue = new_value; +		mEventTimer.start(); +	} + +protected: + +	BOOL tick() +	{ +		mCallback(mNewValue); +		mEventTimer.stop(); + +		return FALSE; +	} + +private: + +	LLSD mNewValue; +	callback_t mCallback; +};  //----------------------------------------------------------------------------  static LLRegisterPanelClassWrapper<LLPanelPreference> t_places("panel_preference");  LLPanelPreference::LLPanelPreference() -: LLPanel() +: LLPanel(), +  mBandWidthUpdater(NULL)  {  	mCommitCallbackRegistrar.add("Pref.setControlFalse",	boost::bind(&LLPanelPreference::setControlFalse,this, _2));  	mCommitCallbackRegistrar.add("Pref.updateMediaAutoPlayCheckbox",	boost::bind(&LLPanelPreference::updateMediaAutoPlayCheckbox, this, _1)); @@ -1631,10 +1648,24 @@ BOOL LLPanelPreference::postBuild()  		}  	} +	//////////////////////PanelSetup /////////////////// +	if (hasChild("max_bandwidth")) +	{ +		mBandWidthUpdater = new LLPanelPreference::Updater(boost::bind(&handleBandwidthChanged, _1), BANDWIDTH_UPDATER_TIMEOUT); +		gSavedSettings.getControl("ThrottleBandwidthKBPS")->getSignal()->connect(boost::bind(&LLPanelPreference::Updater::update, mBandWidthUpdater, _2)); +	} +  	apply();  	return true;  } +LLPanelPreference::~LLPanelPreference() +{ +	if (mBandWidthUpdater) +	{ +		delete mBandWidthUpdater; +	} +}  void LLPanelPreference::apply()  {  	// no-op diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h index 5d5e066ec5..5fe509fb37 100644 --- a/indra/newview/llfloaterpreference.h +++ b/indra/newview/llfloaterpreference.h @@ -159,8 +159,6 @@ public:  	void buildPopupLists();  	static void refreshSkin(void* data); -	// Remove record of current user's favorites from file on disk. -	void removeFavoritesRecordOfUser();  private:  	static std::string sSkin;  	// set true if state of double-click action checkbox or radio-group was changed by user @@ -172,8 +170,6 @@ private:  	bool mAvatarDataInitialized;  	bool mOriginalHideOnlineStatus; -	// Record of current user's favorites may be stored in file on disk. -	bool mFavoritesRecordMayExist;  	std::string mDirectoryVisibility;  	LLAvatarData mAvatarProperties; @@ -185,6 +181,8 @@ public:  	LLPanelPreference();  	/*virtual*/ BOOL postBuild(); +	virtual ~LLPanelPreference(); +  	virtual void apply();  	virtual void cancel();  	void setControlFalse(const LLSD& user_data); @@ -198,6 +196,7 @@ public:  	// cancel() can restore them.  	virtual void saveSettings(); +	class Updater;  private:  	//for "Only friends and groups can call or IM me"  	static void showFriendsOnlyWarning(LLUICtrl*, const LLSD&); @@ -209,6 +208,8 @@ private:  	typedef std::map<std::string, LLColor4> string_color_map_t;  	string_color_map_t mSavedColors; + +	Updater* mBandWidthUpdater;  };  class LLPanelPreferenceGraphics : public LLPanelPreference diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp index 2041fac8d8..d5806e375c 100644 --- a/indra/newview/llfloatersearch.cpp +++ b/indra/newview/llfloatersearch.cpp @@ -31,6 +31,7 @@  #include "llfloaterreg.h"  #include "llfloatersearch.h"  #include "llmediactrl.h" +#include "llnotificationsutil.h"  #include "lllogininstance.h"  #include "lluri.h"  #include "llagent.h" @@ -46,6 +47,12 @@ public:  	LLSearchHandler() : LLCommandHandler("search", UNTRUSTED_THROTTLE) { }  	bool handle(const LLSD& tokens, const LLSD& query_map, LLMediaCtrl* web)  	{ +		if (!LLUI::sSettingGroups["config"]->getBOOL("EnableSearch")) +		{ +			LLNotificationsUtil::add("NoSearch", LLSD(), LLSD(), std::string("SwitchToStandardSkinAndQuit")); +			return true; +		} +  		const size_t parts = tokens.size();  		// get the (optional) category for the search diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp index abcd8588dc..36c5d12897 100644 --- a/indra/newview/lllogininstance.cpp +++ b/indra/newview/lllogininstance.cpp @@ -558,6 +558,18 @@ void LLLoginInstance::constructAuthParams(LLPointer<LLCredential> user_credentia  	requested_options.append("buddy-list");  	requested_options.append("newuser-config");  	requested_options.append("ui-config"); + +	//send this info to login.cgi for stats gathering  +	//since viewerstats isn't reliable enough +	if (gSavedSettings.getString("SessionSettingsFile").empty()) +	{ +		requested_options.append("advanced-mode"); +	} +	else +	{ +		requested_options.append("basic-mode"); +	} +  #endif  	requested_options.append("max-agent-groups");	  	requested_options.append("map-server-url");	 diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp index 162e465fef..d3fd959152 100644 --- a/indra/newview/llnearbychatbar.cpp +++ b/indra/newview/llnearbychatbar.cpp @@ -47,6 +47,7 @@  #include "llwindow.h"  #include "llviewerwindow.h"  #include "llrootview.h" +#include "llviewerchat.h"  S32 LLNearbyChatBar::sLastSpecialChatChannel = 0; @@ -433,13 +434,26 @@ BOOL LLNearbyChatBar::postBuild()  	mChatBox->setPassDelete(TRUE);  	mChatBox->setReplaceNewlinesWithSpaces(FALSE);  	mChatBox->setEnableLineHistory(TRUE); +	mChatBox->setFont(LLViewerChat::getChatFont());  	mOutputMonitor = getChild<LLOutputMonitorCtrl>("chat_zone_indicator");  	mOutputMonitor->setVisible(FALSE); +	// Register for font change notifications +	LLViewerChat::setFontChangedCallback(boost::bind(&LLNearbyChatBar::onChatFontChange, this, _1)); +  	return TRUE;  } +void LLNearbyChatBar::onChatFontChange(LLFontGL* fontp) +{ +	// Update things with the new font whohoo +	if (mChatBox) +	{ +		mChatBox->setFont(fontp); +	} +} +  //static  LLNearbyChatBar* LLNearbyChatBar::getInstance()  { diff --git a/indra/newview/llnearbychatbar.h b/indra/newview/llnearbychatbar.h index 96ab45071b..efddec942f 100644 --- a/indra/newview/llnearbychatbar.h +++ b/indra/newview/llnearbychatbar.h @@ -127,6 +127,7 @@ protected:  	void sendChat( EChatType type );  	void onChatBoxCommit(); +	void onChatFontChange(LLFontGL* fontp);  	static LLWString stripChannelNumber(const LLWString &mesg, S32* channel);  	EChatType processChatTypeTriggers(EChatType type, std::string &str); diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp index cb8fbd66b5..b73d97e4c4 100644 --- a/indra/newview/llpaneleditwearable.cpp +++ b/indra/newview/llpaneleditwearable.cpp @@ -1133,7 +1133,7 @@ void LLPanelEditWearable::showWearable(LLWearable* wearable, BOOL show, BOOL dis                          LLScrollingPanelList *panel_list = getChild<LLScrollingPanelList>(scrolling_panel);                          LLAccordionCtrlTab *tab = getChild<LLAccordionCtrlTab>(accordion_tab); -         +			                          if (!panel_list)                          {                                  llwarns << "could not get scrolling panel list: " << scrolling_panel << llendl; @@ -1145,7 +1145,18 @@ void LLPanelEditWearable::showWearable(LLWearable* wearable, BOOL show, BOOL dis                                  llwarns << "could not get llaccordionctrltab from UI with name: " << accordion_tab << llendl;                                  continue;                          } -         + +			// Don't show female subparts if you're not female, etc. +			if (!(gAgentAvatarp->getSex() & subpart_entry->mSex)) +			{ +				tab->setVisible(FALSE); +				continue; +			} +			else +			{ +				tab->setVisible(TRUE); +			} +			                          // what edit group do we want to extract params for?                          const std::string edit_group = subpart_entry->mEditGroup; diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index 7820ac3ecd..979d96ca0d 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -81,6 +81,9 @@ const S32 MAX_PASSWORD = 16;  LLPanelLogin *LLPanelLogin::sInstance = NULL;  BOOL LLPanelLogin::sCapslockDidNotification = FALSE; +// Helper for converting a user name into the canonical "Firstname Lastname" form. +// For new accounts without a last name "Resident" is added as a last name. +static std::string canonicalize_username(const std::string& name);  class LLLoginRefreshHandler : public LLCommandHandler  { @@ -302,7 +305,14 @@ void LLPanelLogin::addFavoritesToStartLocation()  	for (LLSD::map_const_iterator iter = fav_llsd.beginMap();  		iter != fav_llsd.endMap(); ++iter)  	{ -		if(iter->first != getChild<LLComboBox>("username_combo")->getSimple()) continue; +		std::string user_defined_name = getChild<LLComboBox>("username_combo")->getSimple(); + +		// The account name in stored_favorites.xml has Resident last name even if user has +		// a single word account name, so it can be compared case-insensitive with the +		// user defined "firstname lastname". +		S32 res = LLStringUtil::compareInsensitive(canonicalize_username(user_defined_name), iter->first); +		if (res != 0) continue; +  		combo->addSeparator();  		LLSD user_llsd = iter->second;  		for (LLSD::array_const_iterator iter1 = user_llsd.beginArray(); @@ -1186,3 +1196,28 @@ void LLPanelLogin::onModeChangeConfirm(const LLSD& original_value, const LLSD& n  		break;  	}  } + +std::string canonicalize_username(const std::string& name) +{ +	std::string cname = name; +	LLStringUtil::trim(cname); + +	// determine if the username is a first/last form or not. +	size_t separator_index = cname.find_first_of(" ._"); +	std::string first = cname.substr(0, separator_index); +	std::string last; +	if (separator_index != cname.npos) +	{ +		last = cname.substr(separator_index+1, cname.npos); +		LLStringUtil::trim(last); +	} +	else +	{ +		// ...on Linden grids, single username users as considered to have +		// last name "Resident" +		last = "Resident"; +	} + +	// Username in traditional "firstname lastname" form. +	return first + ' ' + last; +} diff --git a/indra/newview/llphysicsmotion.cpp b/indra/newview/llphysicsmotion.cpp index 23fa0cbd9c..30a04109bc 100644 --- a/indra/newview/llphysicsmotion.cpp +++ b/indra/newview/llphysicsmotion.cpp @@ -43,7 +43,8 @@  typedef std::map<std::string, std::string> controller_map_t;  typedef std::map<std::string, F32> default_controller_map_t; -#define MIN_REQUIRED_PIXEL_AREA_BREAST_MOTION 0.f; +#define MIN_REQUIRED_PIXEL_AREA_AVATAR_PHYSICS_MOTION 0.f +#define TIME_ITERATION_STEP 0.1f  inline F64 llsgn(const F64 a)  { @@ -122,12 +123,11 @@ protected:          }          void setParamValue(LLViewerVisualParam *param,                             const F32 new_value_local, -						   F32 behavior_maxeffect); +                                                   F32 behavior_maxeffect);          F32 toLocal(const LLVector3 &world); -        F32 calculateVelocity_local(const F32 time_delta); -        F32 calculateAcceleration_local(F32 velocity_local, -                                        const F32 time_delta); +        F32 calculateVelocity_local(); +        F32 calculateAcceleration_local(F32 velocity_local);  private:          const std::string mParamDriverName;          const std::string mParamControllerName; @@ -364,7 +364,7 @@ void LLPhysicsMotionController::addMotion(LLPhysicsMotion *motion)  F32 LLPhysicsMotionController::getMinPixelArea()   { -        return MIN_REQUIRED_PIXEL_AREA_BREAST_MOTION; +        return MIN_REQUIRED_PIXEL_AREA_AVATAR_PHYSICS_MOTION;  }  // Local space means "parameter space". @@ -378,19 +378,20 @@ F32 LLPhysicsMotion::toLocal(const LLVector3 &world)          return world * dir_world;  } -F32 LLPhysicsMotion::calculateVelocity_local(const F32 time_delta) +F32 LLPhysicsMotion::calculateVelocity_local()  { +	const F32 world_to_model_scale = 100.0f;          LLJoint *joint = mJointState->getJoint();          const LLVector3 position_world = joint->getWorldPosition();          const LLQuaternion rotation_world = joint->getWorldRotation();          const LLVector3 last_position_world = mPosition_world; -        const LLVector3 velocity_world = (position_world-last_position_world) / time_delta; +	const LLVector3 positionchange_world = (position_world-last_position_world) * world_to_model_scale; +        const LLVector3 velocity_world = positionchange_world;          const F32 velocity_local = toLocal(velocity_world);          return velocity_local;  } -F32 LLPhysicsMotion::calculateAcceleration_local(const F32 velocity_local, -                                                 const F32 time_delta) +F32 LLPhysicsMotion::calculateAcceleration_local(const F32 velocity_local)  {  //        const F32 smoothing = getParamValue("Smoothing");          static const F32 smoothing = 3.0f; // Removed smoothing param since it's probably not necessary @@ -446,7 +447,15 @@ BOOL LLPhysicsMotion::onUpdate(F32 time)          //          const F32 time_delta = time - mLastTime; -        if (time_delta > 3.0 || time_delta <= 0.01) + +	// Don't update too frequently, to avoid precision errors from small time slices. +	if (time_delta <= .01) +	{ +		return FALSE; +	} +	 +	// If less than 1FPS, we don't want to be spending time updating physics at all. +        if (time_delta > 1.0)          {                  mLastTime = time;                  return FALSE; @@ -468,201 +477,207 @@ BOOL LLPhysicsMotion::onUpdate(F32 time)          const F32 behavior_gain = getParamValue("Gain");          const F32 behavior_damping = getParamValue("Damping");          const F32 behavior_drag = getParamValue("Drag"); -        const BOOL physics_test = gSavedSettings.getBOOL("AvatarPhysicsTest") && gAgent.isGodlike(); +        const BOOL physics_test = FALSE; // Enable this to simulate bouncing on all parts.          F32 behavior_maxeffect = getParamValue("MaxEffect");          if (physics_test)                  behavior_maxeffect = 1.0f; -        // mPositon_local should be in normalized 0,1 range already.  Just making sure... -        F32 position_current_local = llclamp(mPosition_local, -                                             0.0f, -                                             1.0f); - -        // Normalize the param position to be from [0,1]. -        // We have to use normalized values because there may be more than one driven param, -        // and each of these driven params may have its own range. -        // This means we'll do all our calculations in normalized [0,1] local coordinates. -        F32 position_user_local = mParamDriver->getWeight(); -        position_user_local = (position_user_local - mParamDriver->getMinWeight()) / (mParamDriver->getMaxWeight() - mParamDriver->getMinWeight()); - -        // If the effect is turned off then don't process unless we need one more update -        // to set the position to the default (i.e. user) position. -        if ((behavior_maxeffect == 0) && (position_current_local == position_user_local)) -        { -            return FALSE; -        } - -        // -        // End parameters and settings -        //////////////////////////////////////////////////////////////////////////////// - - -        //////////////////////////////////////////////////////////////////////////////// -        // Calculate velocity and acceleration in parameter space. -        // +	// Normalize the param position to be from [0,1]. +	// We have to use normalized values because there may be more than one driven param, +	// and each of these driven params may have its own range. +	// This means we'll do all our calculations in normalized [0,1] local coordinates. +	const F32 position_user_local = (mParamDriver->getWeight() - mParamDriver->getMinWeight()) / (mParamDriver->getMaxWeight() - mParamDriver->getMinWeight()); +       	 +	// +	// End parameters and settings +	//////////////////////////////////////////////////////////////////////////////// +	 +	 +	//////////////////////////////////////////////////////////////////////////////// +	// Calculate velocity and acceleration in parameter space. +	// -        const F32 velocity_joint_local = calculateVelocity_local(time_delta); -        const F32 acceleration_joint_local = calculateAcceleration_local(velocity_joint_local, time_delta); - -        // -        // End velocity and acceleration -        //////////////////////////////////////////////////////////////////////////////// - - -        //////////////////////////////////////////////////////////////////////////////// -        // Calculate the total force  -        // - -        // Spring force is a restoring force towards the original user-set breast position. -        // F = kx -        const F32 spring_length = position_current_local - position_user_local; -        const F32 force_spring = -spring_length * behavior_spring; - -        // Acceleration is the force that comes from the change in velocity of the torso. -        // F = ma -        const F32 force_accel = behavior_gain * (acceleration_joint_local * behavior_mass); - -        // Gravity always points downward in world space. -        // F = mg -        const LLVector3 gravity_world(0,0,1); -        const F32 force_gravity = behavior_gain * (toLocal(gravity_world) * behavior_gravity * behavior_mass); +	//const F32 velocity_joint_local = calculateVelocity_local(time_iteration_step); +	const F32 velocity_joint_local = calculateVelocity_local(); +	const F32 acceleration_joint_local = calculateAcceleration_local(velocity_joint_local); +	 +	// +	// End velocity and acceleration +	//////////////////////////////////////////////////////////////////////////////// +	 +	BOOL update_visuals = FALSE; +	 +	// Break up the physics into a bunch of iterations so that differing framerates will show +	// roughly the same behavior. +	for (F32 time_iteration = 0; time_iteration <= time_delta; time_iteration += TIME_ITERATION_STEP) +	{ +		F32 time_iteration_step = TIME_ITERATION_STEP; +		if (time_iteration + TIME_ITERATION_STEP > time_delta) +		{ +			time_iteration_step = time_delta-time_iteration; +		} +		 +		// mPositon_local should be in normalized 0,1 range already.  Just making sure... +		const F32 position_current_local = llclamp(mPosition_local, +							   0.0f, +							   1.0f); +		// If the effect is turned off then don't process unless we need one more update +		// to set the position to the default (i.e. user) position. +		if ((behavior_maxeffect == 0) && (position_current_local == position_user_local)) +		{ +			return update_visuals; +		} + +		//////////////////////////////////////////////////////////////////////////////// +		// Calculate the total force  +		// + +		// Spring force is a restoring force towards the original user-set breast position. +		// F = kx +		const F32 spring_length = position_current_local - position_user_local; +		const F32 force_spring = -spring_length * behavior_spring; + +		// Acceleration is the force that comes from the change in velocity of the torso. +		// F = ma +		const F32 force_accel = behavior_gain * (acceleration_joint_local * behavior_mass); + +		// Gravity always points downward in world space. +		// F = mg +		const LLVector3 gravity_world(0,0,1); +		const F32 force_gravity = (toLocal(gravity_world) * behavior_gravity * behavior_mass); -        // Damping is a restoring force that opposes the current velocity. -        // F = -kv -        const F32 force_damping = -behavior_damping * mVelocity_local; +		// Damping is a restoring force that opposes the current velocity. +		// F = -kv +		const F32 force_damping = -behavior_damping * mVelocity_local; -        // Drag is a force imparted by velocity (intuitively it is similar to wind resistance) -        // F = .5kv^2 -        const F32 force_drag = .5*behavior_drag*velocity_joint_local*velocity_joint_local*llsgn(velocity_joint_local); +		// Drag is a force imparted by velocity (intuitively it is similar to wind resistance) +		// F = .5kv^2 +		const F32 force_drag = .5*behavior_drag*velocity_joint_local*velocity_joint_local*llsgn(velocity_joint_local); -        const F32 force_net = (force_accel +  -                               force_gravity + -                               force_spring +  -                               force_damping +  -                               force_drag); +		const F32 force_net = (force_accel +  +				       force_gravity + +				       force_spring +  +				       force_damping +  +				       force_drag); -        // -        // End total force -        //////////////////////////////////////////////////////////////////////////////// +		// +		// End total force +		//////////////////////////////////////////////////////////////////////////////// -        //////////////////////////////////////////////////////////////////////////////// -        // Calculate new params -        // - -        // Calculate the new acceleration based on the net force. -        // a = F/m -        const F32 acceleration_new_local = force_net / behavior_mass; -        static const F32 max_acceleration = 10.0f; // magic number, used to be customizable. -        F32 velocity_new_local = mVelocity_local + acceleration_new_local; -        velocity_new_local = llclamp(velocity_new_local,  -                                     -max_acceleration, max_acceleration); +		//////////////////////////////////////////////////////////////////////////////// +		// Calculate new params +		// + +		// Calculate the new acceleration based on the net force. +		// a = F/m +		const F32 acceleration_new_local = force_net / behavior_mass; +		static const F32 max_velocity = 100.0f; // magic number, used to be customizable. +		F32 velocity_new_local = mVelocity_local + acceleration_new_local*time_iteration_step; +		velocity_new_local = llclamp(velocity_new_local,  +					     -max_velocity, max_velocity); -        // Temporary debugging setting to cause all avatars to move, for profiling purposes. -        if (physics_test) -        { -                velocity_new_local = sin(time*4.0); -        } -        // Calculate the new parameters, or remain unchanged if max speed is 0. -        F32 position_new_local = position_current_local + velocity_new_local*time_delta; -        if (behavior_maxeffect == 0) -            position_new_local = position_user_local; - -        // Zero out the velocity if the param is being pushed beyond its limits. -        if ((position_new_local < 0 && velocity_new_local < 0) ||  -            (position_new_local > 1 && velocity_new_local > 0)) -        { -                velocity_new_local = 0; -        } +		// Temporary debugging setting to cause all avatars to move, for profiling purposes. +		if (physics_test) +		{ +			velocity_new_local = sin(time*4.0); +		} +		// Calculate the new parameters, or remain unchanged if max speed is 0. +		F32 position_new_local = position_current_local + velocity_new_local*time_iteration_step; +		if (behavior_maxeffect == 0) +			position_new_local = position_user_local; + +		// Zero out the velocity if the param is being pushed beyond its limits. +		if ((position_new_local < 0 && velocity_new_local < 0) ||  +		    (position_new_local > 1 && velocity_new_local > 0)) +		{ +			velocity_new_local = 0; +		} -	// Check for NaN values.  A NaN value is detected if the variables doesn't equal itself.   -	// If NaN, then reset everything. -	if ((mPosition_local != mPosition_local) || -	    (mVelocity_local != mVelocity_local) || -	    (position_new_local != position_new_local)) -	{ -		position_new_local = 0; -		position_current_local = 0; -		position_user_local = 0; -		mVelocity_local = 0; -		mVelocityJoint_local = 0; -		mAccelerationJoint_local = 0; -		mPosition_local = 0; -		mPosition_world = LLVector3(0,0,0); -	} - -        const F32 position_new_local_clamped = llclamp(position_new_local, -						       0.0f, -						       1.0f); - -        LLDriverParam *driver_param = dynamic_cast<LLDriverParam *>(mParamDriver); -        llassert_always(driver_param); -        if (driver_param) -        { -                // If this is one of our "hidden" driver params, then make sure it's -                // the default value. -                if ((driver_param->getGroup() != VISUAL_PARAM_GROUP_TWEAKABLE) && -                    (driver_param->getGroup() != VISUAL_PARAM_GROUP_TWEAKABLE_NO_TRANSMIT)) -                { -                        mCharacter->setVisualParamWeight(driver_param, -                                                         0, -                                                         FALSE); -                } -                for (LLDriverParam::entry_list_t::iterator iter = driver_param->mDriven.begin(); -                     iter != driver_param->mDriven.end(); -                     ++iter) -                { -                        LLDrivenEntry &entry = (*iter); -                        LLViewerVisualParam *driven_param = entry.mParam; -                        setParamValue(driven_param,position_new_local_clamped, behavior_maxeffect); -                } -        } +		// Check for NaN values.  A NaN value is detected if the variables doesn't equal itself.   +		// If NaN, then reset everything. +		if ((mPosition_local != mPosition_local) || +		    (mVelocity_local != mVelocity_local) || +		    (position_new_local != position_new_local)) +		{ +			position_new_local = 0; +			mVelocity_local = 0; +			mVelocityJoint_local = 0; +			mAccelerationJoint_local = 0; +			mPosition_local = 0; +			mPosition_world = LLVector3(0,0,0); +		} + +		const F32 position_new_local_clamped = llclamp(position_new_local, +							       0.0f, +							       1.0f); + +		LLDriverParam *driver_param = dynamic_cast<LLDriverParam *>(mParamDriver); +		llassert_always(driver_param); +		if (driver_param) +		{ +			// If this is one of our "hidden" driver params, then make sure it's +			// the default value. +			if ((driver_param->getGroup() != VISUAL_PARAM_GROUP_TWEAKABLE) && +			    (driver_param->getGroup() != VISUAL_PARAM_GROUP_TWEAKABLE_NO_TRANSMIT)) +			{ +				mCharacter->setVisualParamWeight(driver_param, +								 0, +								 FALSE); +			} +			for (LLDriverParam::entry_list_t::iterator iter = driver_param->mDriven.begin(); +			     iter != driver_param->mDriven.end(); +			     ++iter) +			{ +				LLDrivenEntry &entry = (*iter); +				LLViewerVisualParam *driven_param = entry.mParam; +				setParamValue(driven_param,position_new_local_clamped, behavior_maxeffect); +			} +		} -        // -        // End calculate new params -        //////////////////////////////////////////////////////////////////////////////// +		// +		// End calculate new params +		//////////////////////////////////////////////////////////////////////////////// -        //////////////////////////////////////////////////////////////////////////////// -        // Conditionally update the visual params -        // +		//////////////////////////////////////////////////////////////////////////////// +		// Conditionally update the visual params +		// -        // Updating the visual params (i.e. what the user sees) is fairly expensive. -        // So only update if the params have changed enough, and also take into account -        // the graphics LOD settings. +		// Updating the visual params (i.e. what the user sees) is fairly expensive. +		// So only update if the params have changed enough, and also take into account +		// the graphics LOD settings. -        BOOL update_visuals = FALSE; - -        // For non-self, if the avatar is small enough visually, then don't update. -        const F32 area_for_max_settings = 0.0; -        const F32 area_for_min_settings = 1400.0; -        const F32 area_for_this_setting = area_for_max_settings + (area_for_min_settings-area_for_max_settings)*(1.0-lod_factor); -        const F32 pixel_area = fsqrtf(mCharacter->getPixelArea()); +		// For non-self, if the avatar is small enough visually, then don't update. +		const F32 area_for_max_settings = 0.0; +		const F32 area_for_min_settings = 1400.0; +		const F32 area_for_this_setting = area_for_max_settings + (area_for_min_settings-area_for_max_settings)*(1.0-lod_factor); +		const F32 pixel_area = fsqrtf(mCharacter->getPixelArea()); -        const BOOL is_self = (dynamic_cast<LLVOAvatarSelf *>(mCharacter) != NULL); -        if ((pixel_area > area_for_this_setting) || is_self) -        { -                const F32 position_diff_local = llabs(mPositionLastUpdate_local-position_new_local_clamped); -                const F32 min_delta = (1.01f-lod_factor)*0.4f; -                if (llabs(position_diff_local) > min_delta) -                { -                        update_visuals = TRUE; -                        mPositionLastUpdate_local = position_new_local; -                } -        } - -        // -        // End update visual params -        //////////////////////////////////////////////////////////////////////////////// - -        mVelocityJoint_local = velocity_joint_local; - -        mVelocity_local = velocity_new_local; -        mAccelerationJoint_local = acceleration_joint_local; -        mPosition_local = position_new_local; +		const BOOL is_self = (dynamic_cast<LLVOAvatarSelf *>(mCharacter) != NULL); +		if ((pixel_area > area_for_this_setting) || is_self) +		{ +			const F32 position_diff_local = llabs(mPositionLastUpdate_local-position_new_local_clamped); +			const F32 min_delta = (1.0001f-lod_factor)*0.4f; +			if (llabs(position_diff_local) > min_delta) +			{ +				update_visuals = TRUE; +				mPositionLastUpdate_local = position_new_local; +			} +		} + +		// +		// End update visual params +		//////////////////////////////////////////////////////////////////////////////// + +		mVelocity_local = velocity_new_local; +		mAccelerationJoint_local = acceleration_joint_local; +		mPosition_local = position_new_local; +	} +	mLastTime = time; +	mPosition_world = joint->getWorldPosition(); +	mVelocityJoint_local = velocity_joint_local; -        mPosition_world = joint->getWorldPosition(); -        mLastTime = time;          /*            // Write out debugging info into a spreadsheet. diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp index 6cfb708112..18d6731fcb 100644 --- a/indra/newview/llpreviewtexture.cpp +++ b/indra/newview/llpreviewtexture.cpp @@ -143,10 +143,7 @@ void LLPreviewTexture::onSaveAsBtn(void* data)  void LLPreviewTexture::draw()  { -	if (mUpdateDimensions) -	{ -		updateDimensions(); -	} +	updateDimensions();  	LLPreview::draw(); @@ -396,27 +393,32 @@ void LLPreviewTexture::onFileLoadedForSave(BOOL success,  void LLPreviewTexture::updateDimensions()  {  	if (!mImage) +	{  		return; - -	if(mImage->getFullWidth() == 0 || mImage->getFullHeight() == 0) +	} +	if ((mImage->getFullWidth() * mImage->getFullHeight()) == 0)  	{  		return;  	} -	mUpdateDimensions = FALSE; - -	getChild<LLUICtrl>("dimensions")->setTextArg("[WIDTH]", llformat("%d", mImage->getFullWidth())); +	// Update the width/height display every time +	getChild<LLUICtrl>("dimensions")->setTextArg("[WIDTH]",  llformat("%d", mImage->getFullWidth()));  	getChild<LLUICtrl>("dimensions")->setTextArg("[HEIGHT]", llformat("%d", mImage->getFullHeight())); -	 -	//reshape floater -	reshape(getRect().getWidth(), getRect().getHeight()); +	// Reshape the floater only when required +	if (mUpdateDimensions) +	{ +		mUpdateDimensions = FALSE; +		 +		//reshape floater +		reshape(getRect().getWidth(), getRect().getHeight()); -	gFloaterView->adjustToFitScreen(this, FALSE); +		gFloaterView->adjustToFitScreen(this, FALSE); -	LLRect dim_rect(getChildView("dimensions")->getRect()); -	LLRect aspect_label_rect(getChildView("aspect_ratio")->getRect()); -	getChildView("aspect_ratio")->setVisible( dim_rect.mRight < aspect_label_rect.mLeft); +		LLRect dim_rect(getChildView("dimensions")->getRect()); +		LLRect aspect_label_rect(getChildView("aspect_ratio")->getRect()); +		getChildView("aspect_ratio")->setVisible( dim_rect.mRight < aspect_label_rect.mLeft); +	}  } diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp index 4f18ee1da2..e4c2293938 100644 --- a/indra/newview/llsidetray.cpp +++ b/indra/newview/llsidetray.cpp @@ -1192,6 +1192,38 @@ void LLSideTray::reshape(S32 width, S32 height, BOOL called_from_parent)  	arrange();  } +// This is just LLView::findChildView specialized to restrict the search to LLPanels. +// Optimization for EXT-4068 to avoid searching down to the individual item level +// when inventories are large. +LLPanel *findChildPanel(LLPanel *panel, const std::string& name, bool recurse) +{ +	for (LLView::child_list_const_iter_t child_it = panel->beginChild(); +		 child_it != panel->endChild(); ++child_it) +	{ +		LLPanel *child_panel = dynamic_cast<LLPanel*>(*child_it); +		if (!child_panel) +			continue; +		if (child_panel->getName() == name) +			return child_panel; +	} +	if (recurse) +	{ +		for (LLView::child_list_const_iter_t child_it = panel->beginChild(); +			 child_it != panel->endChild(); ++child_it) +		{ +			LLPanel *child_panel = dynamic_cast<LLPanel*>(*child_it); +			if (!child_panel) +				continue; +			LLPanel *found_panel = findChildPanel(child_panel,name,recurse); +			if (found_panel) +			{ +				return found_panel; +			} +		} +	} +	return NULL; +} +  /**   * Activate tab with "panel_name" panel   * if no such tab - return false, otherwise true. @@ -1221,23 +1253,50 @@ LLPanel*	LLSideTray::showPanel		(const std::string& panel_name, const LLSD& para  	return new_panel;  } -void LLSideTray::hidePanel(const std::string& panel_name) +bool LLSideTray::hidePanel(const std::string& panel_name)  { +	bool panelHidden = false; +	  	LLPanel* panelp = getPanel(panel_name); +  	if (panelp)  	{ -		if(isTabAttached(panel_name)) +		LLView* parentp = panelp->getParent(); +		 +		// Collapse the side bar if the panel or the panel's parent is an attached tab +		if (isTabAttached(panel_name) || (parentp && isTabAttached(parentp->getName())))  		{  			collapseSideBar(); +			panelHidden = true;  		}  		else  		{ -			LLFloaterReg::hideInstance("side_bar_tab", panel_name); +			panelHidden = LLFloaterReg::hideInstance("side_bar_tab", panel_name); +			 +			if (!panelHidden) +			{ +				// Look up the panel in the list of detached tabs. +				for (child_vector_const_iter_t child_it = mDetachedTabs.begin(); child_it != mDetachedTabs.end(); ++child_it) +				{ +					LLPanel *detached_panel = dynamic_cast<LLPanel*>(*child_it); +					 +					if (detached_panel) +					{ +						// Hide this detached panel if it is a parent of our panel +						if (findChildPanel(detached_panel, panel_name, true) != NULL) +						{ +							panelHidden = LLFloaterReg::hideInstance("side_bar_tab", detached_panel->getName()); +							break; +						} +					} +				} +			}  		}  	} +	 +	return panelHidden;  } -  void LLSideTray::togglePanel(LLPanel* &sub_panel, const std::string& panel_name, const LLSD& params)  {  	if(!sub_panel) @@ -1255,38 +1314,6 @@ void LLSideTray::togglePanel(LLPanel* &sub_panel, const std::string& panel_name,  	}  } -// This is just LLView::findChildView specialized to restrict the search to LLPanels. -// Optimization for EXT-4068 to avoid searching down to the individual item level -// when inventories are large. -LLPanel *findChildPanel(LLPanel *panel, const std::string& name, bool recurse) -{ -	for (LLView::child_list_const_iter_t child_it = panel->beginChild(); -		 child_it != panel->endChild(); ++child_it) -	{ -		LLPanel *child_panel = dynamic_cast<LLPanel*>(*child_it); -		if (!child_panel) -			continue; -		if (child_panel->getName() == name) -			return child_panel; -	} -	if (recurse) -	{ -		for (LLView::child_list_const_iter_t child_it = panel->beginChild(); -			 child_it != panel->endChild(); ++child_it) -		{ -			LLPanel *child_panel = dynamic_cast<LLPanel*>(*child_it); -			if (!child_panel) -				continue; -			LLPanel *found_panel = findChildPanel(child_panel,name,recurse); -			if (found_panel) -			{ -				return found_panel; -			} -		} -	} -	return NULL; -} -  LLPanel* LLSideTray::getPanel(const std::string& panel_name)  {  	// Look up the panel in the list of detached tabs. diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h index 1dddd9e9bc..46765bfbcc 100644 --- a/indra/newview/llsidetray.h +++ b/indra/newview/llsidetray.h @@ -104,7 +104,7 @@ public:  	 */  	LLPanel*	showPanel		(const std::string& panel_name, const LLSD& params = LLSD()); -	void		hidePanel		(const std::string& panel_name); +	bool		hidePanel		(const std::string& panel_name);  	/**  	 * Toggling Side Tray tab which contains "sub_panel" child of "panel_name" panel. diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index 95bd210ae3..06e0d17b8c 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -639,6 +639,7 @@ BOOL LLToolPie::handleMouseUp(S32 x, S32 y, MASK mask)  	if (click_action == CLICK_ACTION_NONE				// not doing 1-click action  		&& gSavedSettings.getBOOL("ClickToWalk")		// click to walk enabled  		&& !gAgent.getFlying()							// don't auto-navigate while flying until that works +		&& !gAgentAvatarp->isSitting()  		&& !mBlockClickToWalk							// another behavior hasn't cancelled click to walk  		&& !mPick.mPosGlobal.isExactlyZero()			// valid coordinates for pick  		&& (mPick.mPickType == LLPickInfo::PICK_LAND	// we clicked on land diff --git a/indra/newview/llviewerchat.cpp b/indra/newview/llviewerchat.cpp index 286b16bab2..f5484ff010 100644 --- a/indra/newview/llviewerchat.cpp +++ b/indra/newview/llviewerchat.cpp @@ -36,6 +36,7 @@  #include "llinstantmessage.h" //SYSTEM_FROM  // LLViewerChat +LLViewerChat::font_change_signal_t LLViewerChat::sChatFontChangedSignal;  //static   void LLViewerChat::getChatColor(const LLChat& chat, LLColor4& r_color) @@ -256,3 +257,16 @@ std::string LLViewerChat::getObjectImSLURL(const LLChat& chat, const LLSD& args)  	return url;  } + +//static  +boost::signals2::connection LLViewerChat::setFontChangedCallback(const font_change_signal_t::slot_type& cb) +{ +	return sChatFontChangedSignal.connect(cb); +} + +//static +void LLViewerChat::signalChatFontChanged() +{ +	// Notify all observers that our font has changed +	sChatFontChangedSignal(getChatFont()); +} diff --git a/indra/newview/llviewerchat.h b/indra/newview/llviewerchat.h index 0f15d29f04..c05caf0a95 100644 --- a/indra/newview/llviewerchat.h +++ b/indra/newview/llviewerchat.h @@ -35,6 +35,8 @@  class LLViewerChat   {  public: +	typedef boost::signals2::signal<void (LLFontGL*)> font_change_signal_t; +  	static void getChatColor(const LLChat& chat, LLColor4& r_color);  	static void getChatColor(const LLChat& chat, std::string& r_color_name, F32& r_color_alpha);  	static LLFontGL* getChatFont(); @@ -42,8 +44,12 @@ public:  	static void formatChatMsg(const LLChat& chat, std::string& formated_msg);  	static std::string getSenderSLURL(const LLChat& chat, const LLSD& args); +	static boost::signals2::connection setFontChangedCallback(const font_change_signal_t::slot_type& cb); +	static void signalChatFontChanged(); +  private:  	static std::string getObjectImSLURL(const LLChat& chat, const LLSD& args); +	static font_change_signal_t sChatFontChangedSignal;  }; diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index ffe607f912..06c1520314 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -239,12 +239,6 @@ static bool handleVideoMemoryChanged(const LLSD& newvalue)  	return true;  } -static bool handleBandwidthChanged(const LLSD& newvalue) -{ -	gViewerThrottle.setMaxBandwidth((F32) newvalue.asReal()); -	return true; -} -  static bool handleChatFontSizeChanged(const LLSD& newvalue)  {  	if(gConsole) @@ -562,7 +556,6 @@ void settings_setup_listeners()  	gSavedSettings.getControl("RenderTerrainLODFactor")->getSignal()->connect(boost::bind(&handleTerrainLODChanged, _2));  	gSavedSettings.getControl("RenderTreeLODFactor")->getSignal()->connect(boost::bind(&handleTreeLODChanged, _2));  	gSavedSettings.getControl("RenderFlexTimeFactor")->getSignal()->connect(boost::bind(&handleFlexLODChanged, _2)); -	gSavedSettings.getControl("ThrottleBandwidthKBPS")->getSignal()->connect(boost::bind(&handleBandwidthChanged, _2));  	gSavedSettings.getControl("RenderGamma")->getSignal()->connect(boost::bind(&handleGammaChanged, _2));  	gSavedSettings.getControl("RenderFogRatio")->getSignal()->connect(boost::bind(&handleFogRatioChanged, _2));  	gSavedSettings.getControl("RenderMaxPartCount")->getSignal()->connect(boost::bind(&handleMaxPartCountChanged, _2)); diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index 519514d99c..9e58acdcd3 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -183,6 +183,12 @@ public:  			return false;  		} +		if (!LLUI::sSettingGroups["config"]->getBOOL("EnableInventory")) +		{ +				LLNotificationsUtil::add("NoInventory", LLSD(), LLSD(), std::string("SwitchToStandardSkinAndQuit")); +				return true; +		} +  		// support secondlife:///app/inventory/show  		if (params[0].asString() == "show")  		{ @@ -1450,6 +1456,9 @@ private:  	void saveFavoritesSLURLs(); +	// Remove record of current user's favorites from file on disk. +	void removeFavoritesRecordOfUser(); +  	void onLandmarkLoaded(const LLUUID& asset_id, LLLandmark* landmark);  	void storeFavoriteSLURL(const LLUUID& asset_id, std::string& slurl); @@ -1534,6 +1543,10 @@ void LLFavoritesOrderStorage::destroyClass()  	{  		LLFavoritesOrderStorage::instance().saveFavoritesSLURLs();  	} +	else +	{ +		LLFavoritesOrderStorage::instance().removeFavoritesRecordOfUser(); +	}  }  void LLFavoritesOrderStorage::load() @@ -1602,6 +1615,28 @@ void LLFavoritesOrderStorage::saveFavoritesSLURLs()  	LLSDSerialize::toPrettyXML(fav_llsd, file);  } +void LLFavoritesOrderStorage::removeFavoritesRecordOfUser() +{ +	std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites.xml"); +	LLSD fav_llsd; +	llifstream file; +	file.open(filename); +	if (!file.is_open()) return; +	LLSDSerialize::fromXML(fav_llsd, file); + +	LLAvatarName av_name; +	LLAvatarNameCache::get( gAgentID, &av_name ); +	if (fav_llsd.has(av_name.getLegacyName())) +	{ +		fav_llsd.erase(av_name.getLegacyName()); +	} + +	llofstream out_file; +	out_file.open(filename); +	LLSDSerialize::toPrettyXML(fav_llsd, out_file); + +} +  void LLFavoritesOrderStorage::onLandmarkLoaded(const LLUUID& asset_id, LLLandmark* landmark)  {  	if (!landmark) return; diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index fda291f3c1..2cf8dbec89 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -493,6 +493,7 @@ void upload_new_resource(const std::string& src_filename, std::string name,  	LLSD args;  	std::string exten = gDirUtilp->getExtension(src_filename); +	U32 codec = LLImageBase::getCodecFromExtension(exten);  	LLAssetType::EType asset_type = LLAssetType::AT_NONE;  	std::string error_message; @@ -510,66 +511,20 @@ void upload_new_resource(const std::string& src_filename, std::string name,   		upload_error(error_message, "NoFileExtension", filename, args);  		return;  	} -	else if( exten == "bmp") +	else if (codec != IMG_CODEC_INVALID)  	{ +		// It's an image file, the upload procedure is the same for all  		asset_type = LLAssetType::AT_TEXTURE; -		if (!LLViewerTextureList::createUploadFile(src_filename, -												 filename, -												 IMG_CODEC_BMP )) +		if (!LLViewerTextureList::createUploadFile(src_filename, filename, codec ))  		{  			error_message = llformat( "Problem with file %s:\n\n%s\n", -					src_filename.c_str(), LLImage::getLastError().c_str()); +									 src_filename.c_str(), LLImage::getLastError().c_str());  			args["FILE"] = src_filename;  			args["ERROR"] = LLImage::getLastError();  			upload_error(error_message, "ProblemWithFile", filename, args);  			return;  		}  	} -	else if( exten == "tga") -	{ -		asset_type = LLAssetType::AT_TEXTURE; -		if (!LLViewerTextureList::createUploadFile(src_filename, -												 filename, -												 IMG_CODEC_TGA )) -		{ -			error_message = llformat("Problem with file %s:\n\n%s\n", -					src_filename.c_str(), LLImage::getLastError().c_str()); -			args["FILE"] = src_filename; -			args["ERROR"] = LLImage::getLastError(); -			upload_error(error_message, "ProblemWithFile", filename, args); -			return; -		} -	} -	else if( exten == "jpg" || exten == "jpeg") -	{ -		asset_type = LLAssetType::AT_TEXTURE; -		if (!LLViewerTextureList::createUploadFile(src_filename, -												 filename, -												 IMG_CODEC_JPEG )) -		{ -			error_message = llformat("Problem with file %s:\n\n%s\n", -					src_filename.c_str(), LLImage::getLastError().c_str()); -			args["FILE"] = src_filename; -			args["ERROR"] = LLImage::getLastError(); -			upload_error(error_message, "ProblemWithFile", filename, args); -			return; -		} -	} - 	else if( exten == "png") - 	{ - 		asset_type = LLAssetType::AT_TEXTURE; - 		if (!LLViewerTextureList::createUploadFile(src_filename, - 												 filename, - 												 IMG_CODEC_PNG )) - 		{ - 			error_message = llformat("Problem with file %s:\n\n%s\n", - 					src_filename.c_str(), LLImage::getLastError().c_str()); - 			args["FILE"] = src_filename; - 			args["ERROR"] = LLImage::getLastError(); - 			upload_error(error_message, "ProblemWithFile", filename, args); - 			return; - 		} - 	}  	else if(exten == "wav")  	{  		asset_type = LLAssetType::AT_SOUND;  // tag it as audio diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 9641a0901c..d0fdae1e1b 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -5523,7 +5523,11 @@ void process_alert_core(const std::string& message, BOOL modal)  	{  		LLSD args;  		std::string new_msg =LLNotifications::instance().getGlobalString(message); -		args["MESSAGE"] = new_msg; + +		std::string localized_msg; +		bool is_message_localized = LLTrans::findString(localized_msg, new_msg); + +		args["MESSAGE"] = is_message_localized ? localized_msg : new_msg;  		LLNotificationsUtil::add("SystemMessageTip", args);  	}  } diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index 06f6ff23c2..5afed721ac 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -927,99 +927,43 @@ void LLViewerTextureList::decodeAllImages(F32 max_time)  BOOL LLViewerTextureList::createUploadFile(const std::string& filename,  										 const std::string& out_filename,  										 const U8 codec) -{ -	// First, load the image. +{	 +	// Load the image +	LLPointer<LLImageFormatted> image = LLImageFormatted::createFromType(codec); +	if (image.isNull()) +	{ +		return FALSE; +	}	 +	if (!image->load(filename)) +	{ +		return FALSE; +	} +	// Decompress or expand it in a raw image structure  	LLPointer<LLImageRaw> raw_image = new LLImageRaw; -	 -	switch (codec) +	if (!image->decode(raw_image, 0.0f))  	{ -		case IMG_CODEC_BMP: -		{ -			LLPointer<LLImageBMP> bmp_image = new LLImageBMP; -			 -			if (!bmp_image->load(filename)) -			{ -				return FALSE; -			} -			 -			if (!bmp_image->decode(raw_image, 0.0f)) -			{ -				return FALSE; -			} -		} -			break; -		case IMG_CODEC_TGA: -		{ -			LLPointer<LLImageTGA> tga_image = new LLImageTGA; -			 -			if (!tga_image->load(filename)) -			{ -				return FALSE; -			} -			 -			if (!tga_image->decode(raw_image)) -			{ -				return FALSE; -			} -			 -			if(	(tga_image->getComponents() != 3) && -			   (tga_image->getComponents() != 4) ) -			{ -				tga_image->setLastError( "Image files with less than 3 or more than 4 components are not supported." ); -				return FALSE; -			} -		} -			break; -		case IMG_CODEC_JPEG: -		{ -			LLPointer<LLImageJPEG> jpeg_image = new LLImageJPEG; -			 -			if (!jpeg_image->load(filename)) -			{ -				return FALSE; -			} -			 -			if (!jpeg_image->decode(raw_image, 0.0f)) -			{ -				return FALSE; -			} -		} -			break; -		case IMG_CODEC_PNG: -		{ -			LLPointer<LLImagePNG> png_image = new LLImagePNG; -			 -			if (!png_image->load(filename)) -			{ -				return FALSE; -			} -			 -			if (!png_image->decode(raw_image, 0.0f)) -			{ -				return FALSE; -			} -		} -			break; -		default: -			return FALSE; +		return FALSE;  	} -	 -	LLPointer<LLImageJ2C> compressedImage = convertToUploadFile(raw_image); -	 -	if( !compressedImage->save(out_filename) ) +	// Check the image constraints +	if ((image->getComponents() != 3) && (image->getComponents() != 4))  	{ -		llinfos << "Couldn't create output file " << out_filename << llendl; +		image->setLastError("Image files with less than 3 or more than 4 components are not supported.");  		return FALSE;  	} -	 -	// test to see if the encode and save worked. +	// Convert to j2c (JPEG2000) and save the file locally +	LLPointer<LLImageJ2C> compressedImage = convertToUploadFile(raw_image);	 +	if (!compressedImage->save(out_filename)) +	{ +		llinfos << "Couldn't create output file : " << out_filename << llendl; +		return FALSE; +	} +	// Test to see if the encode and save worked  	LLPointer<LLImageJ2C> integrity_test = new LLImageJ2C; -	if( !integrity_test->loadAndValidate( out_filename ) ) +	if (!integrity_test->loadAndValidate( out_filename ))  	{ -		llinfos << "Image: " << out_filename << " is corrupt." << llendl; +		llinfos << "Image file : " << out_filename << " is corrupt" << llendl;  		return FALSE;  	} -	  	return TRUE;  } diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 4305349ea2..e020296842 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -3968,7 +3968,9 @@ BOOL LLViewerWindow::thumbnailSnapshot(LLImageRaw *raw, S32 preview_width, S32 p  	return rawSnapshot(raw, preview_width, preview_height, FALSE, FALSE, show_ui, do_rebuild, type);  } -// Saves the image from the screen to the specified filename and path. +// Saves the image from the screen to a raw image +// Since the required size might be bigger than the available screen, this method rerenders the scene in parts (called subimages) and copy +// the results over to the final raw image.  BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_height,   								 BOOL keep_window_aspect, BOOL is_texture, BOOL show_ui, BOOL do_rebuild, ESnapshotType type, S32 max_size)  { @@ -3986,8 +3988,6 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei  	// Hide all the UI widgets first and draw a frame  	BOOL prev_draw_ui = gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI) ? TRUE : FALSE; -	show_ui = show_ui ? TRUE : FALSE; -  	if ( prev_draw_ui != show_ui)  	{  		LLPipeline::toggleRenderDebugFeature((void*)LLPipeline::RENDER_DEBUG_FEATURE_UI); @@ -4007,55 +4007,49 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei  	// from window  	LLRect window_rect = show_ui ? getWindowRectRaw() : getWorldViewRectRaw();  -	S32 snapshot_width = window_rect.getWidth(); +	S32 snapshot_width  = window_rect.getWidth();  	S32 snapshot_height = window_rect.getHeight();  	// SNAPSHOT -	S32 window_width = snapshot_width; +	S32 window_width  = snapshot_width;  	S32 window_height = snapshot_height; +	// Note: Scaling of the UI is currently *not* supported so we limit the output size if UI is requested  	if (show_ui)  	{ -		image_width = llmin(image_width, window_width); +		// If the user wants the UI, limit the output size to the available screen size +		image_width  = llmin(image_width, window_width);  		image_height = llmin(image_height, window_height);  	}  	F32 scale_factor = 1.0f ; -	if(!keep_window_aspect) //image cropping -	{		 +	if (!keep_window_aspect || (image_width > window_width) || (image_height > window_height)) +	{	 +		// if image cropping or need to enlarge the scene, compute a scale_factor  		F32 ratio = llmin( (F32)window_width / image_width , (F32)window_height / image_height) ; -		snapshot_width = (S32)(ratio * image_width) ; +		snapshot_width  = (S32)(ratio * image_width) ;  		snapshot_height = (S32)(ratio * image_height) ;  		scale_factor = llmax(1.0f, 1.0f / ratio) ;  	} -	else //the scene(window) proportion needs to be maintained. -	{ -		if(image_width > window_width || image_height > window_height) //need to enlarge the scene -		{ -			F32 ratio = llmin( (F32)window_width / image_width , (F32)window_height / image_height) ; -			snapshot_width = (S32)(ratio * image_width) ; -			snapshot_height = (S32)(ratio * image_height) ; -			scale_factor = llmax(1.0f, 1.0f / ratio) ;	 -		} -	}  	if (show_ui && scale_factor > 1.f)  	{ +		// Note: we should never get there...  		llwarns << "over scaling UI not supported." << llendl;  	} -	S32 buffer_x_offset = llfloor(((window_width - snapshot_width) * scale_factor) / 2.f); +	S32 buffer_x_offset = llfloor(((window_width  - snapshot_width)  * scale_factor) / 2.f);  	S32 buffer_y_offset = llfloor(((window_height - snapshot_height) * scale_factor) / 2.f); -	S32 image_buffer_x = llfloor(snapshot_width*scale_factor) ; -	S32 image_buffer_y = llfloor(snapshot_height *scale_factor) ; +	S32 image_buffer_x = llfloor(snapshot_width  * scale_factor) ; +	S32 image_buffer_y = llfloor(snapshot_height * scale_factor) ; -	if(image_buffer_x > max_size || image_buffer_y > max_size) //boundary check to avoid memory overflow +	if ((image_buffer_x > max_size) || (image_buffer_y > max_size)) // boundary check to avoid memory overflow  	{  		scale_factor *= llmin((F32)max_size / image_buffer_x, (F32)max_size / image_buffer_y) ; -		image_buffer_x = llfloor(snapshot_width*scale_factor) ; -		image_buffer_y = llfloor(snapshot_height *scale_factor) ; +		image_buffer_x = llfloor(snapshot_width  * scale_factor) ; +		image_buffer_y = llfloor(snapshot_height * scale_factor) ;  	} -	if(image_buffer_x > 0 && image_buffer_y > 0) +	if ((image_buffer_x > 0) && (image_buffer_y > 0))  	{  		raw->resize(image_buffer_x, image_buffer_y, 3);  	} @@ -4063,7 +4057,7 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei  	{  		return FALSE ;  	} -	if(raw->isBufferInvalid()) +	if (raw->isBufferInvalid())  	{  		return FALSE ;  	} @@ -4071,6 +4065,7 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei  	BOOL high_res = scale_factor >= 2.f; // Font scaling is slow, only do so if rez is much higher  	if (high_res && show_ui)  	{ +		// Note: we should never get there...  		llwarns << "High res UI snapshot not supported. " << llendl;  		/*send_agent_pause();  		//rescale fonts @@ -4085,6 +4080,8 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei  	gObjectList.generatePickList(*LLViewerCamera::getInstance()); +	// Subimages are in fact partial rendering of the final view. This happens when the final view is bigger than the screen. +	// In most common cases, scale_factor is 1 and there's no more than 1 iteration on x and y  	for (int subimage_y = 0; subimage_y < scale_factor; ++subimage_y)  	{  		S32 subimage_y_offset = llclamp(buffer_y_offset - (subimage_y * window_height), 0, window_height);; @@ -4098,69 +4095,70 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei  			gDisplaySwapBuffers = FALSE;  			gDepthDirty = TRUE; -			const U32 subfield = subimage_x+(subimage_y*llceil(scale_factor)); - -			if (LLPipeline::sRenderDeferred) -			{ -					display(do_rebuild, scale_factor, subfield, TRUE); -			} -			else -			{ -				display(do_rebuild, scale_factor, subfield, TRUE); -					// Required for showing the GUI in snapshots and performing bloom composite overlay -					// Call even if show_ui is FALSE -				render_ui(scale_factor, subfield); -			} -  			S32 subimage_x_offset = llclamp(buffer_x_offset - (subimage_x * window_width), 0, window_width);  			// handle fractional rows  			U32 read_width = llmax(0, (window_width - subimage_x_offset) -  									llmax(0, (window_width * (subimage_x + 1)) - (buffer_x_offset + raw->getWidth()))); -			for(U32 out_y = 0; out_y < read_height ; out_y++) +			 +			// Skip rendering and sampling altogether if either width or height is degenerated to 0 (common in cropping cases) +			if (read_width && read_height)  			{ -				S32 output_buffer_offset = (  -							(out_y * (raw->getWidth())) // ...plus iterated y... -							+ (window_width * subimage_x) // ...plus subimage start in x... -							+ (raw->getWidth() * window_height * subimage_y) // ...plus subimage start in y... -							- output_buffer_offset_x // ...minus buffer padding x... -							- (output_buffer_offset_y * (raw->getWidth()))  // ...minus buffer padding y... -						) * raw->getComponents(); +				const U32 subfield = subimage_x+(subimage_y*llceil(scale_factor)); +				display(do_rebuild, scale_factor, subfield, TRUE); -				// Ping the wathdog thread every 100 lines to keep us alive (arbitrary number, feel free to change) -				if (out_y % 100 == 0) +				if (!LLPipeline::sRenderDeferred)  				{ -					LLAppViewer::instance()->pingMainloopTimeout("LLViewerWindow::rawSnapshot"); +					// Required for showing the GUI in snapshots and performing bloom composite overlay +					// Call even if show_ui is FALSE +					render_ui(scale_factor, subfield);  				} -				if (type == SNAPSHOT_TYPE_COLOR) +				for (U32 out_y = 0; out_y < read_height ; out_y++)  				{ -					glReadPixels( -						subimage_x_offset, out_y + subimage_y_offset, -						read_width, 1, -						GL_RGB, GL_UNSIGNED_BYTE, -						raw->getData() + output_buffer_offset -					); -				} -				else // SNAPSHOT_TYPE_DEPTH -				{ -					LLPointer<LLImageRaw> depth_line_buffer = new LLImageRaw(read_width, 1, sizeof(GL_FLOAT)); // need to store floating point values -					glReadPixels( -						subimage_x_offset, out_y + subimage_y_offset, -						read_width, 1, -						GL_DEPTH_COMPONENT, GL_FLOAT, -						depth_line_buffer->getData()// current output pixel is beginning of buffer... -					); - -					for (S32 i = 0; i < (S32)read_width; i++) +					S32 output_buffer_offset = (  +												(out_y * (raw->getWidth())) // ...plus iterated y... +												+ (window_width * subimage_x) // ...plus subimage start in x... +												+ (raw->getWidth() * window_height * subimage_y) // ...plus subimage start in y... +												- output_buffer_offset_x // ...minus buffer padding x... +												- (output_buffer_offset_y * (raw->getWidth()))  // ...minus buffer padding y... +												) * raw->getComponents(); +				 +					// Ping the watchdog thread every 100 lines to keep us alive (arbitrary number, feel free to change) +					if (out_y % 100 == 0)  					{ -						F32 depth_float = *(F32*)(depth_line_buffer->getData() + (i * sizeof(F32))); -					 -						F32 linear_depth_float = 1.f / (depth_conversion_factor_1 - (depth_float * depth_conversion_factor_2)); -						U8 depth_byte = F32_to_U8(linear_depth_float, LLViewerCamera::getInstance()->getNear(), LLViewerCamera::getInstance()->getFar()); -						//write converted scanline out to result image -						for(S32 j = 0; j < raw->getComponents(); j++) +						LLAppViewer::instance()->pingMainloopTimeout("LLViewerWindow::rawSnapshot"); +					} +				 +					if (type == SNAPSHOT_TYPE_COLOR) +					{ +						glReadPixels( +									 subimage_x_offset, out_y + subimage_y_offset, +									 read_width, 1, +									 GL_RGB, GL_UNSIGNED_BYTE, +									 raw->getData() + output_buffer_offset +									 ); +					} +					else // SNAPSHOT_TYPE_DEPTH +					{ +						LLPointer<LLImageRaw> depth_line_buffer = new LLImageRaw(read_width, 1, sizeof(GL_FLOAT)); // need to store floating point values +						glReadPixels( +									 subimage_x_offset, out_y + subimage_y_offset, +									 read_width, 1, +									 GL_DEPTH_COMPONENT, GL_FLOAT, +									 depth_line_buffer->getData()// current output pixel is beginning of buffer... +									 ); + +						for (S32 i = 0; i < (S32)read_width; i++)  						{ -							*(raw->getData() + output_buffer_offset + (i * raw->getComponents()) + j) = depth_byte; +							F32 depth_float = *(F32*)(depth_line_buffer->getData() + (i * sizeof(F32))); +					 +							F32 linear_depth_float = 1.f / (depth_conversion_factor_1 - (depth_float * depth_conversion_factor_2)); +							U8 depth_byte = F32_to_U8(linear_depth_float, LLViewerCamera::getInstance()->getNear(), LLViewerCamera::getInstance()->getFar()); +							// write converted scanline out to result image +							for (S32 j = 0; j < raw->getComponents(); j++) +							{ +								*(raw->getData() + output_buffer_offset + (i * raw->getComponents()) + j) = depth_byte; +							}  						}  					}  				} diff --git a/indra/newview/llwearabletype.cpp b/indra/newview/llwearabletype.cpp index 9e95604712..c090ab5c3d 100644 --- a/indra/newview/llwearabletype.cpp +++ b/indra/newview/llwearabletype.cpp @@ -80,7 +80,7 @@ LLWearableDictionary::LLWearableDictionary()  	addEntry(LLWearableType::WT_ALPHA,        new WearableEntry("alpha",       "New Alpha",			LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_ALPHA, FALSE, TRUE));  	addEntry(LLWearableType::WT_TATTOO,       new WearableEntry("tattoo",      "New Tattoo",		LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_TATTOO, FALSE, TRUE)); -	addEntry(LLWearableType::WT_PHYSICS,      new WearableEntry("physics",     "New Physics",		LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_PHYSICS, TRUE, FALSE)); +	addEntry(LLWearableType::WT_PHYSICS,      new WearableEntry("physics",     "New Physics",		LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_PHYSICS, TRUE, TRUE));  	addEntry(LLWearableType::WT_INVALID,      new WearableEntry("invalid",     "Invalid Wearable", 	LLAssetType::AT_NONE, 		LLInventoryIcon::ICONNAME_NONE, FALSE, FALSE));  	addEntry(LLWearableType::WT_NONE,      	  new WearableEntry("none",        "Invalid Wearable", 	LLAssetType::AT_NONE, 		LLInventoryIcon::ICONNAME_NONE, FALSE, FALSE)); diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index 72a4dd7f63..a19eccf748 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -760,4 +760,21 @@      <color       name="MenuBarProjectBgColor"       reference="MdBlue" /> +   +    <!-- Generic color names (legacy) --> +  <color +    name="white" +    value="1 1 1 1"/> +  <color +    name="black" +    value="0 0 0 1"/> +  <color +    name="red" +    value="1 0 0 1"/> +  <color +    name="green" +    value="0 1 0 1"/> +  <color +    name="blue" +    value="0 0 1 1"/>  </colors> diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 318bc9251f..3fb3717e68 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -7214,7 +7214,49 @@ The site at '<nolink>[HOST_NAME]</nolink>' in realm '     yestext="Quit"     notext="Don't Quit"/>    </notification> -   + +  <notification + name="NoInventory" + label="" + type="alertmodal" + unique="true"> +    <tag>fail</tag> +    <tag>confirm</tag> +    Viewing inventory is only available in Advanced mode. Would you like to logout and change modes? +    <usetemplate +   name="okcancelbuttons" +   yestext="Quit" +   notext="Don't Quit"/> +  </notification> + +  <notification + name="NoAppearance" + label="" + type="alertmodal" + unique="true"> +    <tag>fail</tag> +    <tag>confirm</tag> +    The appearance editor is only available in Advanced mode. Would you like to logout and change modes? +    <usetemplate +   name="okcancelbuttons" +   yestext="Quit" +   notext="Don't Quit"/> +  </notification> + +  <notification + name="NoSearch" + label="" + type="alertmodal" + unique="true"> +    <tag>fail</tag> +    <tag>confirm</tag> +    Search is only available in Advanced mode. Would you like to logout and change modes? +    <usetemplate +   name="okcancelbuttons" +   yestext="Quit" +   notext="Don't Quit"/> +  </notification> +    <global name="UnsupportedCPU">  - Your CPU speed does not meet the minimum requirements.    </global> diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml index a92cc886e7..c8882fd02c 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml @@ -5,121 +5,121 @@   bg_opaque_color="DkGray"   chrome="true"   follows="left|bottom|right" - focus_root="true"  + focus_root="true"   height="33"   layout="topleft"   left="0"   name="bottom_tray"   top="28"   width="1310"> -    <string +  <string       name="DragIndicationImageName"       value="Accordion_ArrowOpened_Off" /> -    <string +  <string       name="SpeakBtnToolTip"       value="Turns microphone on/off" /> -    <string +  <string       name="VoiceControlBtnToolTip"       value="Shows/hides voice control panel" /> -    <layout_stack +  <layout_stack       border_size="0"       clip="false"       follows="all"       height="28" -     layout="topleft" -     left="0" +   layout="topleft" +   left="0"       mouse_opaque="false"       name="toolbar_stack"       orientation="horizontal"       top="0"       width="1310"> -        <layout_panel +    <layout_panel           auto_resize="false" -         user_resize="false"  +         user_resize="false"           min_width="2"           width="2" /> -        <layout_panel +    <layout_panel           auto_resize="false"           layout="topleft"           max_width="320"           min_width="214" -         height="28"  +         height="28"           mouse_opaque="false" -         name="chat_bar_layout_panel" +		 name="chat_bar_layout_panel"           user_resize="true" -         width="310" > -          <panel -            name="chat_bar" -            filename="panel_nearby_chat_bar.xml" -            left="0" -            height="28" -            width="308" -            top="0" -            mouse_opaque="false" -            follows="left|right" +     width="310" > +      <panel +		   name="chat_bar" +			  filename="panel_nearby_chat_bar.xml" +			  left="0" +			  height="28" +        width="308" +			  top="0" +			  mouse_opaque="false" +			  follows="left|right"            /> -        </layout_panel> -        <!-- +    </layout_panel> +    <!--           This 5px Panel is an indicator of where the resize handle is.           The panel provides a gap between the resize handle icon and a button to the right.            --> -        <layout_panel -         auto_resize="false" -         layout="topleft" -         max_width="5"  -         min_width="5" -         name="chat_bar_resize_handle_panel" -         user_resize="false" -         width="5"> -            <icon -             follows="top|right" -             height="25" -             image_name="ChatBarHandle" -             layout="topleft" -             left="-7" -             name="resize_handle" -             top="4" -             width="5" /> -        </layout_panel> -        <layout_panel -         auto_resize="false" -         follows="left|right" -         height="28" -         layout="topleft" -         min_height="28" -         min_width="59" -         mouse_opaque="false" -         name="speak_panel" -         top_delta="0" -         user_resize="false" -         width="108"> -            <talk_button -             follows="left|right" -             height="23" -             layout="topleft" -             left="0" -             name="talk" -             top="5" -             width="105"> -                <show_button -                 tab_stop="true"> -                    <init_callback -                     function="Button.SetDockableFloaterToggle" -                     parameter="voice_controls" /> -                </show_button> -                <!-- do not remove halign attribute with default value. otherwise it can't be overridden in other locales. +    <layout_panel +     auto_resize="false" +     layout="topleft" +     max_width="5" +     min_width="5" +     name="chat_bar_resize_handle_panel" +     user_resize="false" +     width="5"> +      <icon +       follows="top|right" +       height="25" +       image_name="ChatBarHandle" +       layout="topleft" +       left="-7" +       name="resize_handle" +       top="4" +       width="5" /> +    </layout_panel> +    <layout_panel +        auto_resize="false" +        follows="left|right" +        height="28" +        layout="topleft" +        min_height="28" +        min_width="59" +        mouse_opaque="false" +        name="speak_panel" +        top_delta="0" +        user_resize="false" +        width="108"> +      <talk_button +       follows="left|right" +       height="23" +       layout="topleft" +       left="0" +       name="talk" +       top="5" +       width="105"> +        <show_button +         tab_stop="true"> +          <init_callback +           function="Button.SetDockableFloaterToggle" +           parameter="voice_controls" /> +        </show_button> +        <!-- do not remove halign attribute with default value. otherwise it can't be overridden in other locales.                   & pad_right is default value for long label which can be right aligned. See EXT-6318 --> -                <speak_button -                 halign="center" -                 label="Speak" -                 label_selected="Speak" -                 name="speak_btn" -                 pad_right="20" -                 tab_stop="true" -                 use_ellipses="true" /> -            </talk_button> -        </layout_panel> -        <layout_panel +        <speak_button +         halign="center" +         label="Speak" +         label_selected="Speak" +         name="speak_btn" +         pad_right="20" +         tab_stop="true" +         use_ellipses="true" /> +      </talk_button> +    </layout_panel> +    <layout_panel           auto_resize="false"           follows="right"           height="28" @@ -131,7 +131,7 @@           top_delta="0"           user_resize="false"           width="85"> -            <gesture_combo_list +      <gesture_combo_list               follows="left|right"               height="23"               label="Gesture" @@ -141,46 +141,46 @@               tool_tip="Shows/hides gestures"               top="5"               width="82"> -                <combo_button +        <combo_button                   pad_right="10"                   use_ellipses="true" /> -                <combo_list +        <combo_list                   page_lines="17" /> -            </gesture_combo_list> -        </layout_panel> -        <layout_panel +      </gesture_combo_list> +    </layout_panel> +    <layout_panel           auto_resize="false" -         follows="right" -         height="28" -         layout="topleft" -         min_height="28" -         min_width="52" -         mouse_opaque="false" -         name="movement_panel" -         user_resize="false" -         width="83"> -            <bottomtray_button -             follows="left|right" -             height="23" -             image_pressed="PushButton_Press" -             image_pressed_selected="PushButton_Selected_Press" -             image_selected="PushButton_Selected_Press" -             is_toggle="true" -             label="Move" -             layout="topleft" -             name="movement_btn" -             tool_tip="Shows/hides movement controls" -             top="5" -             use_ellipses="true" -             width="80"> -                <init_callback -                 function="Button.SetDockableFloaterToggle" -                 parameter="moveview" /> -            </bottomtray_button> +     follows="right" +     height="28" +     layout="topleft" +     min_height="28" +     min_width="52" +     mouse_opaque="false" +     name="movement_panel" +     user_resize="false" +     width="83"> +      <bottomtray_button +       follows="left|right" +       height="23" +       image_pressed="PushButton_Press" +       image_pressed_selected="PushButton_Selected_Press" +       image_selected="PushButton_Selected_Press" +       is_toggle="true" +       label="Move" +       layout="topleft" +       name="movement_btn" +       tool_tip="Shows/hides movement controls" +       top="5" +       use_ellipses="true" +       width="80"> +        <init_callback +         function="Button.SetDockableFloaterToggle" +         parameter="moveview" /> +      </bottomtray_button> -        </layout_panel> -        <layout_panel -         auto_resize="false" +    </layout_panel> +    <layout_panel +     auto_resize="false"           follows="left|right"           height="28"           layout="topleft" @@ -190,7 +190,7 @@           name="cam_panel"           user_resize="false"           width="83"> -            <bottomtray_button +      <bottomtray_button               follows="left|right"               height="23"               image_pressed="PushButton_Press" @@ -205,180 +205,180 @@               top="5"               use_ellipses="true"               width="80"> -                <init_callback +        <init_callback                   function="Button.SetDockableFloaterToggle"                   parameter="camera" /> -            </bottomtray_button> -        </layout_panel> -        <layout_panel -         auto_resize="false" -         follows="left|right" -         height="28" -         layout="topleft" -         min_width="40" -         mouse_opaque="false" -         name="snapshot_panel" -         user_resize="false" -         width="39"> -            <bottomtray_button -             follows="left|right" -             height="23" -             image_overlay="Snapshot_Off" -             image_pressed="PushButton_Press" -             image_pressed_selected="PushButton_Selected_Press" -             image_selected="PushButton_Selected_Press" -             is_toggle="true" -             layout="topleft" -             left="0" -             name="snapshots" -             tool_tip="Take snapshot" -             top="5" -             width="36"> -                <init_callback -                 function="Button.SetFloaterToggle" -                 parameter="snapshot" /> -            </bottomtray_button> -        </layout_panel> -        <layout_panel +      </bottomtray_button> +    </layout_panel> +    <layout_panel           auto_resize="false"           follows="left|right"           height="28"           layout="topleft" -         min_height="28" -         min_width="52" -         mouse_opaque="false" -         name="build_btn_panel" -         user_resize="false" -         width="83"> -<!--*FIX: Build Floater is not opened with default registration. Will be fixed soon. +     min_width="40" +		  mouse_opaque="false" +     name="snapshot_panel" +		  user_resize="false" +     width="39"> +      <bottomtray_button +			follows="left|right" +			height="23" +       image_overlay="Snapshot_Off" +			image_pressed="PushButton_Press" +			image_pressed_selected="PushButton_Selected_Press" +			image_selected="PushButton_Selected_Press" +       is_toggle="true" +			layout="topleft" +			left="0" +       name="snapshots" +       tool_tip="Take snapshot" +			top="5" +       width="36"> +        <init_callback +         function="Button.SetFloaterToggle" +         parameter="snapshot" /> +      </bottomtray_button> +    </layout_panel> +    <layout_panel +		  auto_resize="false" +		  follows="left|right" +		  height="28" +		  layout="topleft" +		  min_height="28" +     min_width="52" +		  mouse_opaque="false" +     name="build_btn_panel" +		  user_resize="false" +     width="83"> +      <!--*FIX: Build Floater is not opened with default registration. Will be fixed soon.  Disabled for now.  --> -            <bottomtray_button -             follows="left|right" -             height="23" -             image_pressed="PushButton_Press" -             image_pressed_selected="PushButton_Selected_Press" -             image_selected="PushButton_Selected_Press" -             is_toggle="true" -             label="Build" -             layout="topleft" -             left="0" -             name="build_btn" -             tool_tip="Shows/hides Build Tools" -             top="5" -             use_ellipses="true" -             width="80"> -                <commit_callback -                 function="Build.Toggle" -                 parameter="build" /> -            </bottomtray_button> -        </layout_panel> -        <layout_panel -         auto_resize="false" -         follows="left|right" -         height="28" -         layout="topleft" -         min_height="28" -         min_width="52" -         mouse_opaque="false" -         name="search_btn_panel" -         user_resize="false" -         width="83"> -            <bottomtray_button -             follows="left|right" -             height="23" -             image_pressed="PushButton_Press" -             image_pressed_selected="PushButton_Selected_Press" -             image_selected="PushButton_Selected_Press" -             is_toggle="true" -             label="Search" -             layout="topleft" -             left="0" -             name="search_btn" -             tool_tip="Shows/hides Search" -             top="5" -             use_ellipses="true" -             width="80"> -                <init_callback -                 function="Button.SetFloaterToggle" -                 parameter="search" /> -            </bottomtray_button> -        </layout_panel> -        <layout_panel -         auto_resize="false" -         follows="left|right" -         height="28" -         layout="topleft" +      <bottomtray_button +			follows="left|right" +			height="23" +			image_pressed="PushButton_Press" +			image_pressed_selected="PushButton_Selected_Press" +			image_selected="PushButton_Selected_Press" +       is_toggle="true" +       label="Build" +			layout="topleft" +			left="0" +       name="build_btn" +       tool_tip="Shows/hides Build Tools" +			top="5" +			use_ellipses="true" +       width="80"> +        <commit_callback +         function="Build.Toggle" +         parameter="build" /> +      </bottomtray_button> +    </layout_panel> +    <layout_panel +		  auto_resize="false" +		  follows="left|right" +		  height="28" +		  layout="topleft"           min_height="28" -         min_width="52" +     min_width="52"           mouse_opaque="false" -         name="world_map_btn_panel" +     name="search_btn_panel"           user_resize="false" -         width="83"> -            <bottomtray_button -             follows="left|right" -             height="23" -             image_pressed="PushButton_Press" -             image_pressed_selected="PushButton_Selected_Press" -             image_selected="PushButton_Selected_Press" -             is_toggle="true" -             label="Map" -             layout="topleft" -             left="0" -             name="world_map_btn" -             tool_tip="Shows/hides World Map" -             top="5" -             use_ellipses="true" -             width="80"> -                <init_callback -                 function="Button.SetFloaterToggle" -                 parameter="world_map" /> -            </bottomtray_button> -        </layout_panel> -        <layout_panel -         auto_resize="false" -         follows="left|right" -         height="28" -         layout="topleft" -         min_height="28" -         min_width="52" -         mouse_opaque="false" -         name="mini_map_btn_panel" -         user_resize="false" -         width="83"> -            <bottomtray_button -             follows="left|right" -             height="23" -             image_pressed="PushButton_Press" -             image_pressed_selected="PushButton_Selected_Press" -             image_selected="PushButton_Selected_Press" -             is_toggle="true" -             label="Mini-Map" -             layout="topleft" -             left="0" -             name="mini_map_btn" -             tool_tip="Shows/hides Mini-Map" -             top="5" -             use_ellipses="true" -             width="80"> -                <init_callback -                 function="Button.SetFloaterToggle" -                 parameter="mini_map" /> -            </bottomtray_button> -        </layout_panel> -        <layout_panel -         follows="left|right" -         height="30" -         layout="topleft" -         min_width="95" -         mouse_opaque="false" -         name="chiclet_list_panel" -         top="0" -         user_resize="false" -         width="189"> -<!--*NOTE: min_width of the chiclet_panel (chiclet_list) must be the same +     width="83"> +      <bottomtray_button +			  follows="left|right" +			  height="23" +			  image_pressed="PushButton_Press" +			  image_pressed_selected="PushButton_Selected_Press" +			  image_selected="PushButton_Selected_Press" +       is_toggle="true" +       label="Search" +			  layout="topleft" +			  left="0" +       name="search_btn" +       tool_tip="Shows/hides Search" +			  top="5" +			  use_ellipses="true" +       width="80"> +        <init_callback +         function="Button.SetFloaterToggle" +         parameter="search" /> +      </bottomtray_button> +    </layout_panel> +    <layout_panel +		   auto_resize="false" +     follows="left|right" +		   height="28" +		   layout="topleft" +		   min_height="28" +     min_width="52" +		   mouse_opaque="false" +     name="world_map_btn_panel" +		   user_resize="false" +     width="83"> +      <bottomtray_button +			  follows="left|right" +			  height="23" +			  image_pressed="PushButton_Press" +			  image_pressed_selected="PushButton_Selected_Press" +			  image_selected="PushButton_Selected_Press" +       is_toggle="true" +       label="Map" +			  layout="topleft" +			  left="0" +       name="world_map_btn" +       tool_tip="Shows/hides World Map" +			  top="5" +			  use_ellipses="true" +       width="80"> +        <init_callback +         function="Button.SetFloaterToggle" +         parameter="world_map" /> +      </bottomtray_button> +    </layout_panel> +    <layout_panel +		   auto_resize="false" +     follows="left|right" +		   height="28" +		   layout="topleft" +		   min_height="28" +     min_width="52" +		   mouse_opaque="false" +     name="mini_map_btn_panel" +		   user_resize="false" +     width="83"> +      <bottomtray_button +			  follows="left|right" +			  height="23" +			  image_pressed="PushButton_Press" +			  image_pressed_selected="PushButton_Selected_Press" +			  image_selected="PushButton_Selected_Press" +       is_toggle="true" +       label="Mini-Map" +			  layout="topleft" +			  left="0" +       name="mini_map_btn" +       tool_tip="Shows/hides Mini-Map" +			  top="5" +			  use_ellipses="true" +       width="80"> +        <init_callback +         function="Button.SetFloaterToggle" +         parameter="mini_map" /> +      </bottomtray_button> +    </layout_panel> +    <layout_panel +		   follows="left|right" +		   height="30" +		   layout="topleft" +		   min_width="95" +		   mouse_opaque="false" +		   name="chiclet_list_panel" +		   top="0" +		   user_resize="false" +		   width="189"> +      <!--*NOTE: min_width of the chiclet_panel (chiclet_list) must be the same  as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly. EXT-991--> -            <chiclet_panel +      <chiclet_panel               chiclet_padding="4"               follows="left|right"               height="24" @@ -389,7 +389,7 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.               name="chiclet_list"               top="7"               width="189"> -                <button +        <button                   auto_resize="true"                   follows="right"                   height="29" @@ -406,7 +406,7 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.                   top="-28"                   visible="false"                   width="7" /> -                <button +        <button                   auto_resize="true"                   follows="right"                   height="29" @@ -423,13 +423,13 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.                   top="-28"                   visible="false"                   width="7" /> -            </chiclet_panel> -        </layout_panel> -        <layout_panel auto_resize="false" -                      user_resize="false"  +      </chiclet_panel> +    </layout_panel> +    <layout_panel auto_resize="false" +                      user_resize="false"                        width="4"                        min_width="4"/> -        <layout_panel +    <layout_panel           auto_resize="false"           follows="right"           height="28" @@ -440,7 +440,7 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.           top="0"           user_resize="false"           width="37"> -            <chiclet_im_well +      <chiclet_im_well               follows="right"               height="28"               layout="topleft" @@ -449,7 +449,7 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.               name="im_well"               top="0"               width="35"> -             <!-- +        <!--  Emulate 4 states of button by background images, see details in EXT-3147. The same should be for notification_well button  xml attribute           Description  image_unselected        "Unlit" - there are no new messages @@ -457,7 +457,7 @@ image_selected          "Unlit" + "Selected" - there are no new messages and the  image_pressed           "Lit" - there are new messages  image_pressed_selected  "Lit" + "Selected" - there are new messages and the Well is open               --> -                <button +        <button                   auto_resize="true"                   follows="right"                   halign="center" @@ -472,13 +472,13 @@ image_pressed_selected  "Lit" + "Selected" - there are new messages and the Well                   name="Unread IM messages"                   tool_tip="Conversations"                   width="34"> -                    <init_callback +          <init_callback                       function="Button.SetDockableFloaterToggle"                       parameter="im_well_window" /> -                </button> -            </chiclet_im_well> -        </layout_panel> -        <layout_panel +        </button> +      </chiclet_im_well> +    </layout_panel> +    <layout_panel           auto_resize="false"           follows="right"           height="28" @@ -489,7 +489,7 @@ image_pressed_selected  "Lit" + "Selected" - there are new messages and the Well           top="0"           user_resize="false"           width="37"> -            <chiclet_notification +      <chiclet_notification               follows="right"               height="23"               layout="topleft" @@ -498,7 +498,7 @@ image_pressed_selected  "Lit" + "Selected" - there are new messages and the Well               name="notification_well"               top="5"               width="35"> -                <button +        <button                   auto_resize="true"                   bottom_pad="3"                   follows="right" @@ -514,17 +514,17 @@ image_pressed_selected  "Lit" + "Selected" - there are new messages and the Well                   name="Unread"                   tool_tip="Notifications"                   width="34"> -                    <init_callback +          <init_callback                       function="Button.SetDockableFloaterToggle"                       parameter="notification_well_window" /> -                </button> -            </chiclet_notification> -        </layout_panel> -      <layout_panel -         auto_resize="false" -         user_resize="false"  -         min_width="4" -         name="DUMMY2" -         width="8" /> -    </layout_stack> +        </button> +      </chiclet_notification> +    </layout_panel> +    <layout_panel +		   auto_resize="false" +		   user_resize="false" +		   min_width="4" +		   name="DUMMY2" +		   width="8" /> +  </layout_stack>  </panel> diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 27295150c5..b0ede60fa0 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -3214,6 +3214,8 @@ If you continue to receive this message, contact the [SUPPORT_SITE].  		The session initialization is timed out  	</string> +  <string name="Home position set.">Home position set.</string> +      <string name="voice_morphing_url">http://secondlife.com/landing/voicemorphing</string>    <!-- Financial operations strings --> diff --git a/indra/newview/skins/default/xui/en/widgets/loading_indicator.xml b/indra/newview/skins/default/xui/en/widgets/loading_indicator.xml index 6040d24128..ea1d89c975 100644 --- a/indra/newview/skins/default/xui/en/widgets/loading_indicator.xml +++ b/indra/newview/skins/default/xui/en/widgets/loading_indicator.xml @@ -3,6 +3,20 @@      follows="left|top"      mouse_opaque="false"      name="loading_indicator" -    rotations_per_sec="1.0" -    tab_stop="false" -/> +    images_per_sec="1.0" +    tab_stop="false"> +  <images> +    <image name="Progress_1"/> +    <image name="Progress_2"/> +    <image name="Progress_3"/> +    <image name="Progress_4"/> +    <image name="Progress_5"/> +    <image name="Progress_6"/> +    <image name="Progress_7"/> +    <image name="Progress_8"/> +    <image name="Progress_9"/> +    <image name="Progress_10"/> +    <image name="Progress_11"/> +    <image name="Progress_12"/> +  </images> +</loading_indicator>
\ No newline at end of file diff --git a/indra/newview/skins/minimal/xui/en/panel_bottomtray.xml b/indra/newview/skins/minimal/xui/en/panel_bottomtray.xml index d0a77e8c2a..e0c0bd13d9 100644 --- a/indra/newview/skins/minimal/xui/en/panel_bottomtray.xml +++ b/indra/newview/skins/minimal/xui/en/panel_bottomtray.xml @@ -59,8 +59,8 @@  			  follows="left|right"            />  		</layout_panel> -		<layout_panel -         auto_resize="false" +    <layout_panel +        auto_resize="false"           follows="right"           height="28"           layout="topleft" @@ -163,7 +163,7 @@  			layout="topleft"  			left="0"  			name="destination_btn" -			tool_tip="Shows destinations" +			tool_tip="Shows destinations window"  			top="5"  			is_toggle="true"  			use_ellipses="true" diff --git a/indra/newview/skins/minimal/xui/en/panel_im_control_panel.xml b/indra/newview/skins/minimal/xui/en/panel_im_control_panel.xml index 53def54aca..c3f46f11e0 100644 --- a/indra/newview/skins/minimal/xui/en/panel_im_control_panel.xml +++ b/indra/newview/skins/minimal/xui/en/panel_im_control_panel.xml @@ -23,5 +23,69 @@       orientation="vertical"       top_pad="5"       width="145"> +      <layout_panel +       auto_resize="false" +       follows="top|left|right" +       height="20" +       layout="topleft" +       left="2" +       min_height="20" +       width="140" +       name="view_profile_btn_panel" +       top="0" +       user_resize="false"> +        <button +         follows="left|top|right" +         height="23" +         label="Profile" +         name="view_profile_btn" +         top="0" +         width="140" /> +      </layout_panel> +      <layout_panel +       auto_resize="false" +       follows="top|left|right" +       height="25" +       layout="topleft" +       min_height="25" +       width="140" +       name="add_friend_btn_panel" +       user_resize="false"> +        <button +         follows="left|top|right" +         height="23" +         label="Add Friend" +         name="add_friend_btn" +         top="5" +         width="140" /> +      </layout_panel> +      <layout_panel +       auto_resize="false" +       follows="top|left|right" +       height="25" +       layout="topleft" +       min_height="25" +       width="140" +       name="teleport_btn_panel" +       user_resize="false"> +        <button +             auto_resize="false" +             follows="left|top|right" +             height="23" +             label="Teleport" +             name="teleport_btn" +             tool_tip = "Offer to teleport this person" +             width="140" /> +      </layout_panel> +      <layout_panel +       mouse_opaque="false" +       auto_resize="true" +       follows="top|left" +       height="0" +       layout="topleft" +       min_height="0" +       width="140" +       name="spacer" +       user_resize="false" />      </layout_stack>  </panel>  | 
