diff options
83 files changed, 1095 insertions, 466 deletions
| @@ -36,7 +36,7 @@ indra/newview/fmod.dll  indra/newview/mozilla-theme  indra/newview/mozilla-universal-darwin.tgz  indra/newview/res/ll_icon.* -indra/newview/res-sdl +indra/newview/res-sdl/ll_icon.*  indra/newview/vivox-runtime  indra/server-linux-*  indra/temp @@ -356,8 +356,13 @@ a8b3eca451a9eaab59987efb0ab1c4217e3f2dcc DRTVWR-182  cc953f00956be52cc64c30637bbeec310eea603f DRTVWR-181  9ee9387789701d597130f879d9011a4958753862 DRTVWR-189  ae5c83dd61d2d37c45f1d5b8bf2b036d87599f1b DRTVWR-198 +507bdfbd6bf844a511c1ffeda4baa80016ed1346 DRTVWR-197  e9732c739c8a72a590216951505ea9c76a526a84 DRTVWR-193  33a2fc7a910ae29ff8b4850316ed7fbff9f64d33 DRTVWR-195  421126293dcbde918e0da027ca0ab9deb5b4fbf2 DRTVWR-192  4b2c52aecb7a75de31dbb12d9f5b9a251d8707be DRTVWR-191  7602f61c804a512764e349c034c02ddabeefebc4 DRTVWR-196 +b1dbb1a83f48f93f6f878cff9e52d2cb635e145c 3.4.0-beta2 +248f4acd92a706c79e842bc83d80baa7369c0c2e DRTVWR-203 +37402e2b19af970d51b0a814d79892cc5647532b DRTVWR-200 +182a9bf30e81070361bb020a78003b1cf398e79c 3.4.0-beta3 diff --git a/autobuild.xml b/autobuild.xml index d5fd639673..2f6e67ad65 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -2459,6 +2459,18 @@                </map>                <key>configure</key>                <map> +                <key>arguments</key> +                <array> +                  <string>..\indra</string> +                  <string>&&</string> +                  <string>..\indra\tools\vstool\VSTool.exe</string> +                  <string>--solution</string> +                  <string>SecondLife.sln</string> +                  <string>--config</string> +                  <string>Debug</string> +                  <string>--startup</string> +                  <string>secondlife-bin</string> +                </array>                  <key>options</key>                  <array>                    <string>-G</string> @@ -2535,6 +2547,18 @@                </map>                <key>configure</key>                <map> +                <key>arguments</key> +                <array> +                  <string>..\indra</string> +                  <string>&&</string> +                  <string>..\indra\tools\vstool\VSTool.exe</string> +                  <string>--solution</string> +                  <string>SecondLife.sln</string> +                  <string>--config</string> +                  <string>RelWithDebInfo</string> +                  <string>--startup</string> +                  <string>secondlife-bin</string> +                </array>                  <key>options</key>                  <array>                    <string>-G</string> @@ -2611,6 +2635,18 @@                </map>                <key>configure</key>                <map> +                <key>arguments</key> +                <array> +                  <string>..\indra</string> +                  <string>&&</string> +                  <string>..\indra\tools\vstool\VSTool.exe</string> +                  <string>--solution</string> +                  <string>SecondLife.sln</string> +                  <string>--config</string> +                  <string>Release</string> +                  <string>--startup</string> +                  <string>secondlife-bin</string> +                </array>                  <key>options</key>                  <array>                    <string>-G</string> diff --git a/doc/contributions.txt b/doc/contributions.txt index df504e4a8a..3218624f76 100644 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -174,6 +174,7 @@ Ansariel Hiller  	VWR-26150  	STORM-1685  	STORM-1713 +	STORM-1899  Aralara Rajal  Ardy Lay  	STORM-859 @@ -636,6 +637,7 @@ Jonathan Yap  	STORM-1809  	STORM-1793  	STORM-1810 +	STORM-1877  	STORM-1860  	STORM-1852  	STORM-1870 @@ -644,6 +646,7 @@ Jonathan Yap  	STORM-1862  Kadah Coba  	STORM-1060 +    STORM-1843  Jondan Lundquist  Josef Munster  Josette Windlow @@ -739,6 +742,7 @@ Marianne McCann  Marine Kelley      STORM-281  MartinRJ Fayray +    STORM-1844      STORM-1845  Matthew Anthony  Matthew Dowd @@ -1108,9 +1112,12 @@ Sudane Erato  Synystyr Texan  Takeda Terrawyng  TankMaster Finesmith +	OPEN-140 +	OPEN-142  	STORM-1100 -	STORM-1602  	STORM-1258 +	STORM-1602 +	STORM-1868      VWR-26622  Talamasca  Tali Rosca @@ -1228,6 +1235,8 @@ Watty Berkson  Westley Schridde  Westley Streeter  Whimsy Winx +Whirly Fizzle +	STORM-1895  Whoops Babii  	VWR-631  	VWR-1640 diff --git a/etc/message.xml b/etc/message.xml index 7b133ab205..6d8160abb5 100644 --- a/etc/message.xml +++ b/etc/message.xml @@ -385,14 +385,6 @@  					<key>trusted-sender</key>  					<boolean>true</boolean>  				</map> - -				<key>ParcelMediaURLFilter</key> -				<map> -					<key>flavor</key> -					<string>llsd</string> -					<key>trusted-sender</key> -					<boolean>false</boolean> -				</map>  				<key>ParcelNavigateMedia</key>  				<map> diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake index 00baf626d2..487b581056 100644 --- a/indra/cmake/00-Common.cmake +++ b/indra/cmake/00-Common.cmake @@ -51,6 +51,7 @@ if (WINDOWS)    set(CMAKE_CXX_FLAGS_RELEASE        "${CMAKE_CXX_FLAGS_RELEASE} ${LL_CXX_FLAGS} /O2 /Zi /MD /MP /Ob2 -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0"        CACHE STRING "C++ compiler release options" FORCE) +  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE")    set(CMAKE_CXX_STANDARD_LIBRARIES "")    set(CMAKE_C_STANDARD_LIBRARIES "") diff --git a/indra/llcharacter/llhandmotion.cpp b/indra/llcharacter/llhandmotion.cpp index 63937d8255..696dba0d95 100644 --- a/indra/llcharacter/llhandmotion.cpp +++ b/indra/llcharacter/llhandmotion.cpp @@ -132,18 +132,68 @@ BOOL LLHandMotion::onUpdate(F32 time, U8* joint_mask)  	{  		if (mNewPose != HAND_POSE_RELAXED && mNewPose != mCurrentPose)  		{ -			mCharacter->setVisualParamWeight(gHandPoseNames[mNewPose], 0.f); +			// Only set param weight for poses other than +			// default (HAND_POSE_SPREAD); HAND_POSE_SPREAD +			// is not an animatable morph! +			if (mNewPose != HAND_POSE_SPREAD) +			{ +				mCharacter->setVisualParamWeight(gHandPoseNames[mNewPose], 0.f); +			} + +			// Reset morph weight for current pose back to its +			// full extend or it might be stuck somewhere in the middle if a +			// pose is requested and the old pose is requested again shortly +			// after while still blending to the other pose! +			if (mCurrentPose != HAND_POSE_SPREAD) +			{ +				mCharacter->setVisualParamWeight(gHandPoseNames[mCurrentPose], 1.f); +			} + +			// Update visual params now if we won't blend +			if (mCurrentPose == HAND_POSE_RELAXED) +			{ +				mCharacter->updateVisualParams(); +			}  		}  		mNewPose = HAND_POSE_RELAXED;  	}  	else  	{ -		// this is a new morph we didn't know about before -		if (*requestedHandPose != mNewPose && mNewPose != mCurrentPose && mNewPose != HAND_POSE_SPREAD) +		// Sometimes we seem to get garbage here, with poses that are out of bounds. +		// So check for a valid pose first. +		if (*requestedHandPose >= 0 && *requestedHandPose < NUM_HAND_POSES) +		{ +			// This is a new morph we didn't know about before: +			// Reset morph weight for both current and new pose +			// back their starting values while still blending. +			if (*requestedHandPose != mNewPose && mNewPose != mCurrentPose) +			{ +				if (mNewPose != HAND_POSE_SPREAD) +				{ +					mCharacter->setVisualParamWeight(gHandPoseNames[mNewPose], 0.f); +				} + +				// Reset morph weight for current pose back to its full extend +				// or it might be stuck somewhere in the middle if a pose is +				// requested and the old pose is requested again shortly after +				// while still blending to the other pose! +				if (mCurrentPose != HAND_POSE_SPREAD) +				{ +					mCharacter->setVisualParamWeight(gHandPoseNames[mCurrentPose], 1.f); +				} + +				// Update visual params now if we won't blend +				if (mCurrentPose == *requestedHandPose) +				{ +					mCharacter->updateVisualParams(); +				} +			} +			mNewPose = *requestedHandPose; +		} +		else  		{ -			mCharacter->setVisualParamWeight(gHandPoseNames[mNewPose], 0.f); +			llwarns << "Requested hand pose out of range. Ignoring requested pose." << llendl;  		} -		mNewPose = *requestedHandPose;  	}  	mCharacter->removeAnimationData("Hand Pose"); diff --git a/indra/llinventory/llparcel.cpp b/indra/llinventory/llparcel.cpp index 433076c7a9..a871bcbb25 100644 --- a/indra/llinventory/llparcel.cpp +++ b/indra/llinventory/llparcel.cpp @@ -193,8 +193,6 @@ void LLParcel::init(const LLUUID &owner_id,  	mMediaWidth = 0;  	mMediaHeight = 0;  	setMediaCurrentURL(LLStringUtil::null); -	mMediaURLFilterEnable = FALSE; -	mMediaURLFilterList = LLSD::emptyArray();  	mMediaAllowNavigate = TRUE;  	mMediaURLTimeout = 0.0f;  	mMediaPreventCameraZoom = FALSE; @@ -336,38 +334,6 @@ void LLParcel::setMediaURLResetTimer(F32 time)  	mMediaResetTimer.setTimerExpirySec(time);  } -void LLParcel::setMediaURLFilterList(LLSD list) -{ -	// sanity check LLSD -	// must be array of strings -	if (!list.isArray()) -	{ -		return; -	} - -	for (S32 i = 0; i < list.size(); i++) -	{ -		if (!list[i].isString()) -			return; -	} - -	// can't be too big -	const S32 MAX_SIZE = 50; -	if (list.size() > MAX_SIZE) -	{ -		LLSD new_list = LLSD::emptyArray(); - -		for (S32 i = 0; i < llmin(list.size(), MAX_SIZE); i++) -		{ -			new_list.append(list[i]); -		} - -		list = new_list; -	} -	 -	mMediaURLFilterList = list; -} -  // virtual  void LLParcel::setLocalID(S32 local_id)  { @@ -622,34 +588,6 @@ BOOL LLParcel::importAccessEntry(std::istream& input_stream, LLAccessEntry* entr      return input_stream.good();  } -BOOL LLParcel::importMediaURLFilter(std::istream& input_stream, std::string& url) -{ -	skip_to_end_of_next_keyword("{", input_stream); - -	while(input_stream.good()) -	{ -		skip_comments_and_emptyspace(input_stream); -		std::string line, keyword, value; -		get_line(line, input_stream, MAX_STRING); -		get_keyword_and_value(keyword, value, line); - -		if ("}" == keyword) -		{ -			break; -		} -		else if ("url" == keyword) -		{ -			url = value; -		} -		else -		{ -			llwarns << "Unknown keyword in parcel media url filter section: <" -					<< keyword << ">" << llendl; -		} -	} -	return input_stream.good(); -} -  // Assumes we are in a block "ParcelData"  void LLParcel::packMessage(LLMessageSystem* msg)  { @@ -696,8 +634,6 @@ void LLParcel::packMessage(LLSD& msg)  	msg["media_allow_navigate"] = getMediaAllowNavigate();  	msg["media_prevent_camera_zoom"] = getMediaPreventCameraZoom();  	msg["media_url_timeout"] = getMediaURLTimeout(); -	msg["media_url_filter_enable"] = getMediaURLFilterEnable(); -	msg["media_url_filter_list"] = getMediaURLFilterList();  	msg["group_id"] = getGroupID();  	msg["pass_price"] = mPassPrice;  	msg["pass_hours"] = mPassHours; @@ -789,7 +725,6 @@ void LLParcel::unpackMessage(LLMessageSystem* msg)  		msg->getString("MediaLinkSharing", "MediaCurrentURL", buffer);  		setMediaCurrentURL(buffer);  		msg->getU8 ( "MediaLinkSharing", "MediaAllowNavigate", mMediaAllowNavigate ); -		msg->getU8 ( "MediaLinkSharing", "MediaURLFilterEnable", mMediaURLFilterEnable );  		msg->getU8 ( "MediaLinkSharing", "MediaPreventCameraZoom", mMediaPreventCameraZoom );  		msg->getF32( "MediaLinkSharing", "MediaURLTimeout", mMediaURLTimeout);  	} @@ -1250,8 +1185,6 @@ void LLParcel::clearParcel()  	mMediaWidth = 0;  	mMediaHeight = 0;  	setMediaCurrentURL(LLStringUtil::null); -	setMediaURLFilterList(LLSD::emptyArray()); -	setMediaURLFilterEnable(FALSE);  	setMediaAllowNavigate(TRUE);  	setMediaPreventCameraZoom(FALSE);  	setMediaURLTimeout(0.0f); diff --git a/indra/llinventory/llparcel.h b/indra/llinventory/llparcel.h index f0b2caca3d..499f690e76 100644 --- a/indra/llinventory/llparcel.h +++ b/indra/llinventory/llparcel.h @@ -247,8 +247,6 @@ public:  	void setMediaWidth(S32 width);  	void setMediaHeight(S32 height);  	void setMediaCurrentURL(const std::string& url); -	void setMediaURLFilterEnable(U8 enable) { mMediaURLFilterEnable = enable; } -	void setMediaURLFilterList(LLSD list);  	void setMediaAllowNavigate(U8 enable) { mMediaAllowNavigate = enable; }  	void setMediaURLTimeout(F32 timeout) { mMediaURLTimeout = timeout; }  	void setMediaPreventCameraZoom(U8 enable) { mMediaPreventCameraZoom = enable; } @@ -310,7 +308,6 @@ public:  //	BOOL	importStream(std::istream& input_stream);  	BOOL	importAccessEntry(std::istream& input_stream, LLAccessEntry* entry); -	BOOL    importMediaURLFilter(std::istream& input_stream, std::string& url);  	// BOOL	exportStream(std::ostream& output_stream);  	void	packMessage(LLMessageSystem* msg); @@ -354,8 +351,6 @@ public:  	U8				getMediaAutoScale() const	{ return mMediaAutoScale; }  	U8              getMediaLoop() const        { return mMediaLoop; }  	const std::string&  getMediaCurrentURL() const { return mMediaCurrentURL; } -	U8              getMediaURLFilterEnable() const   { return mMediaURLFilterEnable; } -	LLSD            getMediaURLFilterList() const     { return mMediaURLFilterList; }  	U8              getMediaAllowNavigate() const { return mMediaAllowNavigate; }  	F32				getMediaURLTimeout() const { return mMediaURLTimeout; }  	U8              getMediaPreventCameraZoom() const { return mMediaPreventCameraZoom; } @@ -651,8 +646,6 @@ protected:  	U8                  mMediaLoop;  	std::string         mMediaCurrentURL;  	LLUUID				mMediaID; -	U8                  mMediaURLFilterEnable; -	LLSD                mMediaURLFilterList;  	U8                  mMediaAllowNavigate;  	U8					mMediaPreventCameraZoom;  	F32					mMediaURLTimeout; diff --git a/indra/llmessage/llavatarnamecache.cpp b/indra/llmessage/llavatarnamecache.cpp index fbc3cc6de2..32d9d8bfc3 100644 --- a/indra/llmessage/llavatarnamecache.cpp +++ b/indra/llmessage/llavatarnamecache.cpp @@ -657,8 +657,10 @@ void LLAvatarNameCache::fireSignal(const LLUUID& agent_id,  	signal(agent_id, av_name);  } -void LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot) +LLAvatarNameCache::callback_connection_t LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot)  { +	callback_connection_t connection; +  	if (sRunning)  	{  		// ...only do immediate lookups when cache is running @@ -674,7 +676,7 @@ void LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot)  				{  					// ...name already exists in cache, fire callback now  					fireSignal(agent_id, slot, av_name); -					return; +					return connection;  				}  			}  		} @@ -687,7 +689,7 @@ void LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot)  				LLAvatarName av_name;  				buildLegacyName(full_name, &av_name);  				fireSignal(agent_id, slot, av_name); -				return; +				return connection;  			}  		}  	} @@ -704,15 +706,17 @@ void LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot)  	{  		// ...new callback for this id  		callback_signal_t* signal = new callback_signal_t(); -		signal->connect(slot); +		connection = signal->connect(slot);  		sSignalMap[agent_id] = signal;  	}  	else  	{  		// ...existing callback, bind additional slot  		callback_signal_t* signal = sig_it->second; -		signal->connect(slot); +		connection = signal->connect(slot);  	} + +	return connection;  } diff --git a/indra/llmessage/llavatarnamecache.h b/indra/llmessage/llavatarnamecache.h index 59c1329ffa..064942fe53 100644 --- a/indra/llmessage/llavatarnamecache.h +++ b/indra/llmessage/llavatarnamecache.h @@ -71,10 +71,11 @@ namespace LLAvatarNameCache  		void (const LLUUID& agent_id, const LLAvatarName& av_name)>  			callback_signal_t;  	typedef callback_signal_t::slot_type callback_slot_t; +	typedef boost::signals2::connection callback_connection_t;  	// Fetches name information and calls callback.  	// If name information is in cache, callback will be called immediately. -	void get(const LLUUID& agent_id, callback_slot_t slot); +	callback_connection_t get(const LLUUID& agent_id, callback_slot_t slot);  	// Allow display names to be explicitly disabled for testing.  	void setUseDisplayNames(bool use); diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 8ca1e685a9..90251ac7c6 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -748,6 +748,10 @@ void LLFloater::closeFloater(bool app_quitting)  					dependee->setFocus(TRUE);  				}  			} + +			// STORM-1879: since this floater has focus, treat the closeFloater- call +			// like a click on the close-button, and close gear- and contextmenus +			LLMenuGL::sMenuContainer->hideMenus();  		}  		dirtyRect(); diff --git a/indra/llui/lltoggleablemenu.cpp b/indra/llui/lltoggleablemenu.cpp index d29260750f..e4d1a37569 100644 --- a/indra/llui/lltoggleablemenu.cpp +++ b/indra/llui/lltoggleablemenu.cpp @@ -57,7 +57,9 @@ void LLToggleableMenu::handleVisibilityChange (BOOL curVisibilityIn)  	S32 x,y;  	LLUI::getMousePositionLocal(LLUI::getRootView(), &x, &y); -	if (!curVisibilityIn && mButtonRect.pointInRect(x, y)) +	// STORM-1879: also check MouseCapture to see if the button was really +        // clicked (otherwise the VisibilityChange was triggered via keyboard shortcut) +	if (!curVisibilityIn && mButtonRect.pointInRect(x, y) && gFocusMgr.getMouseCapture())  	{  		mClosedByButtonClick = true;  	} diff --git a/indra/llui/tests/llurlentry_stub.cpp b/indra/llui/tests/llurlentry_stub.cpp index cb3b7abb14..74ed72ef97 100644 --- a/indra/llui/tests/llurlentry_stub.cpp +++ b/indra/llui/tests/llurlentry_stub.cpp @@ -40,9 +40,10 @@ bool LLAvatarNameCache::get(const LLUUID& agent_id, LLAvatarName *av_name)  	return false;  } -void LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot) +LLAvatarNameCache::callback_connection_t LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot)  { -	return; +	callback_connection_t connection; +	return connection;  }  bool LLAvatarNameCache::useDisplayNames() diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp index 32bb84cba5..97637c937f 100644 --- a/indra/llwindow/llwindowmacosx.cpp +++ b/indra/llwindow/llwindowmacosx.cpp @@ -2809,42 +2809,48 @@ const char* cursorIDToName(int id)  {  	switch (id)  	{ -		case UI_CURSOR_ARROW:			return "UI_CURSOR_ARROW"; -		case UI_CURSOR_WAIT:			return "UI_CURSOR_WAIT"; -		case UI_CURSOR_HAND:			return "UI_CURSOR_HAND"; -		case UI_CURSOR_IBEAM:			return "UI_CURSOR_IBEAM"; -		case UI_CURSOR_CROSS:			return "UI_CURSOR_CROSS"; -		case UI_CURSOR_SIZENWSE:		return "UI_CURSOR_SIZENWSE"; -		case UI_CURSOR_SIZENESW:		return "UI_CURSOR_SIZENESW"; -		case UI_CURSOR_SIZEWE:			return "UI_CURSOR_SIZEWE"; -		case UI_CURSOR_SIZENS:			return "UI_CURSOR_SIZENS"; -		case UI_CURSOR_NO:				return "UI_CURSOR_NO"; -		case UI_CURSOR_WORKING:			return "UI_CURSOR_WORKING"; -		case UI_CURSOR_TOOLGRAB:		return "UI_CURSOR_TOOLGRAB"; -		case UI_CURSOR_TOOLLAND:		return "UI_CURSOR_TOOLLAND"; -		case UI_CURSOR_TOOLFOCUS:		return "UI_CURSOR_TOOLFOCUS"; -		case UI_CURSOR_TOOLCREATE:		return "UI_CURSOR_TOOLCREATE"; -		case UI_CURSOR_ARROWDRAG:		return "UI_CURSOR_ARROWDRAG"; -		case UI_CURSOR_ARROWCOPY:		return "UI_CURSOR_ARROWCOPY"; -		case UI_CURSOR_ARROWDRAGMULTI:	return "UI_CURSOR_ARROWDRAGMULTI"; -		case UI_CURSOR_ARROWCOPYMULTI:	return "UI_CURSOR_ARROWCOPYMULTI"; -		case UI_CURSOR_NOLOCKED:		return "UI_CURSOR_NOLOCKED"; -		case UI_CURSOR_ARROWLOCKED:		return "UI_CURSOR_ARROWLOCKED"; -		case UI_CURSOR_GRABLOCKED:		return "UI_CURSOR_GRABLOCKED"; -		case UI_CURSOR_TOOLTRANSLATE:	return "UI_CURSOR_TOOLTRANSLATE"; -		case UI_CURSOR_TOOLROTATE:		return "UI_CURSOR_TOOLROTATE"; -		case UI_CURSOR_TOOLSCALE:		return "UI_CURSOR_TOOLSCALE"; -		case UI_CURSOR_TOOLCAMERA:		return "UI_CURSOR_TOOLCAMERA"; -		case UI_CURSOR_TOOLPAN:			return "UI_CURSOR_TOOLPAN"; -		case UI_CURSOR_TOOLZOOMIN:		return "UI_CURSOR_TOOLZOOMIN"; -		case UI_CURSOR_TOOLPICKOBJECT3:	return "UI_CURSOR_TOOLPICKOBJECT3"; -		case UI_CURSOR_TOOLPLAY:		return "UI_CURSOR_TOOLPLAY"; -		case UI_CURSOR_TOOLPAUSE:		return "UI_CURSOR_TOOLPAUSE"; -		case UI_CURSOR_TOOLMEDIAOPEN:	return "UI_CURSOR_TOOLMEDIAOPEN"; -		case UI_CURSOR_PIPETTE:			return "UI_CURSOR_PIPETTE"; -		case UI_CURSOR_TOOLSIT:			return "UI_CURSOR_TOOLSIT"; -		case UI_CURSOR_TOOLBUY:			return "UI_CURSOR_TOOLBUY"; -		case UI_CURSOR_TOOLOPEN:		return "UI_CURSOR_TOOLOPEN"; +		case UI_CURSOR_ARROW:							return "UI_CURSOR_ARROW"; +		case UI_CURSOR_WAIT:							return "UI_CURSOR_WAIT"; +		case UI_CURSOR_HAND:							return "UI_CURSOR_HAND"; +		case UI_CURSOR_IBEAM:							return "UI_CURSOR_IBEAM"; +		case UI_CURSOR_CROSS:							return "UI_CURSOR_CROSS"; +		case UI_CURSOR_SIZENWSE:						return "UI_CURSOR_SIZENWSE"; +		case UI_CURSOR_SIZENESW:						return "UI_CURSOR_SIZENESW"; +		case UI_CURSOR_SIZEWE:							return "UI_CURSOR_SIZEWE"; +		case UI_CURSOR_SIZENS:							return "UI_CURSOR_SIZENS"; +		case UI_CURSOR_NO:								return "UI_CURSOR_NO"; +		case UI_CURSOR_WORKING:							return "UI_CURSOR_WORKING"; +		case UI_CURSOR_TOOLGRAB:						return "UI_CURSOR_TOOLGRAB"; +		case UI_CURSOR_TOOLLAND:						return "UI_CURSOR_TOOLLAND"; +		case UI_CURSOR_TOOLFOCUS:						return "UI_CURSOR_TOOLFOCUS"; +		case UI_CURSOR_TOOLCREATE:						return "UI_CURSOR_TOOLCREATE"; +		case UI_CURSOR_ARROWDRAG:						return "UI_CURSOR_ARROWDRAG"; +		case UI_CURSOR_ARROWCOPY:						return "UI_CURSOR_ARROWCOPY"; +		case UI_CURSOR_ARROWDRAGMULTI:					return "UI_CURSOR_ARROWDRAGMULTI"; +		case UI_CURSOR_ARROWCOPYMULTI:					return "UI_CURSOR_ARROWCOPYMULTI"; +		case UI_CURSOR_NOLOCKED:						return "UI_CURSOR_NOLOCKED"; +		case UI_CURSOR_ARROWLOCKED:						return "UI_CURSOR_ARROWLOCKED"; +		case UI_CURSOR_GRABLOCKED:						return "UI_CURSOR_GRABLOCKED"; +		case UI_CURSOR_TOOLTRANSLATE:					return "UI_CURSOR_TOOLTRANSLATE"; +		case UI_CURSOR_TOOLROTATE:						return "UI_CURSOR_TOOLROTATE"; +		case UI_CURSOR_TOOLSCALE:						return "UI_CURSOR_TOOLSCALE"; +		case UI_CURSOR_TOOLCAMERA:						return "UI_CURSOR_TOOLCAMERA"; +		case UI_CURSOR_TOOLPAN:							return "UI_CURSOR_TOOLPAN"; +		case UI_CURSOR_TOOLZOOMIN:						return "UI_CURSOR_TOOLZOOMIN"; +		case UI_CURSOR_TOOLPICKOBJECT3:					return "UI_CURSOR_TOOLPICKOBJECT3"; +		case UI_CURSOR_TOOLPLAY:						return "UI_CURSOR_TOOLPLAY"; +		case UI_CURSOR_TOOLPAUSE:						return "UI_CURSOR_TOOLPAUSE"; +		case UI_CURSOR_TOOLMEDIAOPEN:					return "UI_CURSOR_TOOLMEDIAOPEN"; +		case UI_CURSOR_PIPETTE:							return "UI_CURSOR_PIPETTE"; +		case UI_CURSOR_TOOLSIT:							return "UI_CURSOR_TOOLSIT"; +		case UI_CURSOR_TOOLBUY:							return "UI_CURSOR_TOOLBUY"; +		case UI_CURSOR_TOOLOPEN:						return "UI_CURSOR_TOOLOPEN"; +		case UI_CURSOR_TOOLPATHFINDING:					return "UI_CURSOR_PATHFINDING"; +		case UI_CURSOR_TOOLPATHFINDING_PATH_START:		return "UI_CURSOR_PATHFINDING_START"; +		case UI_CURSOR_TOOLPATHFINDING_PATH_START_ADD:	return "UI_CURSOR_PATHFINDING_START_ADD"; +		case UI_CURSOR_TOOLPATHFINDING_PATH_END:		return "UI_CURSOR_PATHFINDING_END"; +		case UI_CURSOR_TOOLPATHFINDING_PATH_END_ADD:	return "UI_CURSOR_PATHFINDING_END_ADD"; +		case UI_CURSOR_TOOLNO:							return "UI_CURSOR_NO";  	}  	llerrs << "cursorIDToName: unknown cursor id" << id << llendl; @@ -2950,6 +2956,12 @@ void LLWindowMacOSX::updateCursor()  	case UI_CURSOR_TOOLSIT:  	case UI_CURSOR_TOOLBUY:  	case UI_CURSOR_TOOLOPEN: +	case UI_CURSOR_TOOLPATHFINDING: +	case UI_CURSOR_TOOLPATHFINDING_PATH_START: +	case UI_CURSOR_TOOLPATHFINDING_PATH_START_ADD: +	case UI_CURSOR_TOOLPATHFINDING_PATH_END: +	case UI_CURSOR_TOOLPATHFINDING_PATH_END_ADD: +	case UI_CURSOR_TOOLNO:  		result = setImageCursor(gCursors[mNextCursor]);  		break; @@ -2994,6 +3006,12 @@ void LLWindowMacOSX::initCursors()  	initPixmapCursor(UI_CURSOR_TOOLSIT, 20, 15);  	initPixmapCursor(UI_CURSOR_TOOLBUY, 20, 15);  	initPixmapCursor(UI_CURSOR_TOOLOPEN, 20, 15); +	initPixmapCursor(UI_CURSOR_TOOLPATHFINDING, 16, 16); +	initPixmapCursor(UI_CURSOR_TOOLPATHFINDING_PATH_START, 16, 16); +	initPixmapCursor(UI_CURSOR_TOOLPATHFINDING_PATH_START_ADD, 16, 16); +	initPixmapCursor(UI_CURSOR_TOOLPATHFINDING_PATH_END, 16, 16); +	initPixmapCursor(UI_CURSOR_TOOLPATHFINDING_PATH_END_ADD, 16, 16); +	initPixmapCursor(UI_CURSOR_TOOLNO, 8, 8);  	initPixmapCursor(UI_CURSOR_SIZENWSE, 10, 10);  	initPixmapCursor(UI_CURSOR_SIZENESW, 10, 10); diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp index 3d33af9d9b..3bf4a48cb6 100644 --- a/indra/llwindow/llwindowsdl.cpp +++ b/indra/llwindow/llwindowsdl.cpp @@ -2117,6 +2117,12 @@ void LLWindowSDL::initCursors()  	mSDLCursors[UI_CURSOR_TOOLSIT] = makeSDLCursorFromBMP("toolsit.BMP",20,15);  	mSDLCursors[UI_CURSOR_TOOLBUY] = makeSDLCursorFromBMP("toolbuy.BMP",20,15);  	mSDLCursors[UI_CURSOR_TOOLOPEN] = makeSDLCursorFromBMP("toolopen.BMP",20,15); +	mSDLCursors[UI_CURSOR_TOOLPATHFINDING] = makeSDLCursorFromBMP("lltoolpathfinding.BMP", 16, 16); +	mSDLCursors[UI_CURSOR_TOOLPATHFINDING_PATH_START] = makeSDLCursorFromBMP("lltoolpathfindingpathstart.BMP", 16, 16); +	mSDLCursors[UI_CURSOR_TOOLPATHFINDING_PATH_START_ADD] = makeSDLCursorFromBMP("lltoolpathfindingpathstartadd.BMP", 16, 16); +	mSDLCursors[UI_CURSOR_TOOLPATHFINDING_PATH_END] = makeSDLCursorFromBMP("lltoolpathfindingpathend.BMP", 16, 16); +	mSDLCursors[UI_CURSOR_TOOLPATHFINDING_PATH_END_ADD] = makeSDLCursorFromBMP("lltoolpathfindingpathendadd.BMP", 16, 16); +	mSDLCursors[UI_CURSOR_TOOLNO] = makeSDLCursorFromBMP("llno.BMP",8,8);  	if (getenv("LL_ATI_MOUSE_CURSOR_BUG") != NULL) {  		llinfos << "Disabling cursor updating due to LL_ATI_MOUSE_CURSOR_BUG" << llendl; diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl index 46d2aa4877..bfd9b9b3eb 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl @@ -46,6 +46,6 @@ void main()  	frag_data[0] = vec4(diff.rgb, 0.0);  	frag_data[1] = vec4(0,0,0,0);  	vec3 nvn = normalize(vary_normal); -	frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0); +	frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl b/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl index 680eadb852..23c4ea2fff 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl @@ -52,5 +52,5 @@ void main()  	frag_data[1] = vertex_color.aaaa; // spec  	//frag_data[1] = vec4(vec3(vertex_color.a), vertex_color.a+(1.0-vertex_color.a)*vertex_color.a); // spec - from former class3 - maybe better, but not so well tested  	vec3 nvn = normalize(tnorm); -	frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0); +	frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl index b2027d3a5d..c1fa9e4aac 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl @@ -49,6 +49,6 @@ void main()  	frag_data[0] = vec4(col.rgb, 0.0);  	frag_data[1] = vec4(0,0,0,0); // spec  	vec3 nvn = normalize(vary_normal); -	frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0); +	frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl index ead384b07c..4c68123fac 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl @@ -48,5 +48,5 @@ void main()  	frag_data[0] = vec4(col.rgb, 0.0);  	frag_data[1] = vec4(0,0,0,0);  	vec3 nvn = normalize(vary_normal); -	frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0); +	frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskNoColorF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskNoColorF.glsl index f73fa6f231..ad65c7d330 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskNoColorF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskNoColorF.glsl @@ -49,6 +49,6 @@ void main()  	frag_data[0] = vec4(col.rgb, 0.0);  	frag_data[1] = vec4(0,0,0,0); // spec  	vec3 nvn = normalize(vary_normal); -	frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0); +	frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl index 227aa2aae3..86390bdd83 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl @@ -42,6 +42,6 @@ void main()  	frag_data[1] = vertex_color.aaaa; // spec  	//frag_data[1] = vec4(vec3(vertex_color.a), vertex_color.a+(1.0-vertex_color.a)*vertex_color.a); // spec - from former class3 - maybe better, but not so well tested  	vec3 nvn = normalize(vary_normal); -	frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0); +	frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl index d442e5403a..788b966af8 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl @@ -41,5 +41,5 @@ void main()  	frag_data[1] = vertex_color.aaaa; // spec  	//frag_data[1] = vec4(vec3(vertex_color.a), vertex_color.a+(1.0-vertex_color.a)*vertex_color.a); // spec - from former class3 - maybe better, but not so well tested  	vec3 nvn = normalize(vary_normal); -	frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0); +	frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl index 4d01eeb64e..7e79317543 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl @@ -79,7 +79,7 @@ void main()  	}  	vec3 norm = texture2DRect(normalMap, frag.xy).xyz; -	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm +	norm = (norm.xyz-0.5)*2.0; // unpack norm  	norm = normalize(norm);  	vec4 spec = texture2DRect(specularRect, frag.xy);  	vec3 diff = texture2DRect(diffuseRect, frag.xy).rgb; diff --git a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl index f671d5b750..75757b26c8 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl @@ -84,7 +84,7 @@ void main()  	}  	vec3 norm = texture2DRect(normalMap, frag.xy).xyz; -	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm +	norm = (norm.xyz-0.5)*2.0; // unpack norm  	float da = dot(norm, lv);  	if (da < 0.0)  	{ diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl index 66e3cf6d13..89448e2167 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl @@ -277,7 +277,7 @@ void main()  	float depth = texture2DRect(depthMap, tc.xy).r;  	vec3 pos = getPosition_d(tc, depth).xyz;  	vec3 norm = texture2DRect(normalMap, tc).xyz; -	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm +	norm = (norm.xyz-0.5)*2.0; // unpack norm  	float da = max(dot(norm.xyz, sun_dir.xyz), 0.0); diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl index 2422d73a3e..bac74cbbef 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl @@ -123,7 +123,7 @@ void main()  	vec4 pos = getPosition(pos_screen);  	vec3 norm = texture2DRect(normalMap, pos_screen).xyz; -	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm +	norm = (norm.xyz-0.5)*2.0; // unpack norm  	frag_color[0] = 1.0;  	frag_color[1] = calcAmbientOcclusion(pos, norm); diff --git a/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl b/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl index 8a5e482e80..daf1cc7ea2 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl @@ -56,6 +56,6 @@ void main()  	frag_data[0] = vec4(outColor.rgb, 0.0);  	frag_data[1] = vec4(0,0,0,0);  	vec3 nvn = normalize(vary_normal); -	frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0); +	frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl b/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl index 6cf6106b51..da253846ef 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl @@ -48,5 +48,5 @@ void main()  	frag_data[0] = vec4(vertex_color.rgb*col.rgb, 0.0);  	frag_data[1] = vec4(0,0,0,0);  	vec3 nvn = normalize(vary_normal); -	frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0); +	frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl index 42dc7c0980..3427d6db57 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl @@ -161,5 +161,5 @@ void main()  	frag_data[0] = vec4(color.rgb, 0.5); // diffuse  	frag_data[1] = vec4(0.5,0.5,0.5, 0.95); // speccolor*spec, spec -	frag_data[2] = vec4(screenspacewavef.xy*0.5+0.5, screenspacewavef.z, screenspacewavef.z*0.5); // normalxyz, displace +	frag_data[2] = vec4(screenspacewavef.xyz*0.5+0.5, screenspacewavef.z*0.5); // normalxyz, displace  } diff --git a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl index f7f1f649ce..5621e47ab7 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl @@ -154,7 +154,7 @@ void main()  	}  	vec3 norm = texture2DRect(normalMap, frag.xy).xyz; -	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm +	norm = (norm.xyz-0.5)*2.0; // unpack norm  	norm = normalize(norm);  	float l_dist = -dot(lv, proj_n); diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl index a137bea30f..9df9d75905 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl @@ -279,7 +279,7 @@ void main()  	float depth = texture2DRect(depthMap, tc.xy).r;  	vec3 pos = getPosition_d(tc, depth).xyz;  	vec3 norm = texture2DRect(normalMap, tc).xyz; -	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm +	norm = (norm.xyz-0.5)*2.0; // unpack norm  	float da = max(dot(norm.xyz, sun_dir.xyz), 0.0); diff --git a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl index ab077d9e02..6d6ad6d565 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl @@ -154,7 +154,7 @@ void main()  	}  	vec3 norm = texture2DRect(normalMap, frag.xy).xyz; -	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm +	norm = (norm.xyz-0.5)*2.0; // unpack norm  	norm = normalize(norm);  	float l_dist = -dot(lv, proj_n); diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl index c1495b145e..890486c4b1 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl @@ -126,7 +126,7 @@ void main()  	vec4 pos = getPosition(pos_screen);  	vec4 nmap4 = texture2DRect(normalMap, pos_screen); -	nmap4 = vec4((nmap4.xy-0.5)*2.0,nmap4.z,nmap4.w); // unpack norm +	nmap4 = vec4((nmap4.xyz-0.5)*2.0,nmap4.w); // unpack norm  	float displace = nmap4.w;  	vec3 norm = nmap4.xyz; diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl index 039fca9df2..2dcd3d656f 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl @@ -187,7 +187,7 @@ void main()  	vec4 pos = getPosition(pos_screen);  	vec4 nmap4 = texture2DRect(normalMap, pos_screen); -	nmap4 = vec4((nmap4.xy-0.5)*2.0,nmap4.z,nmap4.w); // unpack norm +	nmap4 = vec4((nmap4.xyz-0.5)*2.0,nmap4.w); // unpack norm  	float displace = nmap4.w;  	vec3 norm = nmap4.xyz; diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING.tifBinary files differ new file mode 100644 index 0000000000..ba6f30fa0e --- /dev/null +++ b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING.tif diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END.tifBinary files differ new file mode 100644 index 0000000000..830d5692fd --- /dev/null +++ b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END.tif diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END_ADD.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END_ADD.tifBinary files differ new file mode 100644 index 0000000000..e05284214a --- /dev/null +++ b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END_ADD.tif diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START.tifBinary files differ new file mode 100644 index 0000000000..c4822adf64 --- /dev/null +++ b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START.tif diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START_ADD.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START_ADD.tifBinary files differ new file mode 100644 index 0000000000..5166af6e05 --- /dev/null +++ b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START_ADD.tif diff --git a/indra/newview/llfloaterpathfindingcharacters.cpp b/indra/newview/llfloaterpathfindingcharacters.cpp index 99d262344c..69c9d94dfa 100644 --- a/indra/newview/llfloaterpathfindingcharacters.cpp +++ b/indra/newview/llfloaterpathfindingcharacters.cpp @@ -134,26 +134,20 @@ void LLFloaterPathfindingCharacters::requestGetObjects()  	LLPathfindingManager::getInstance()->requestGetCharacters(getNewRequestId(), boost::bind(&LLFloaterPathfindingCharacters::handleNewObjectList, this, _1, _2, _3));  } -LLSD LLFloaterPathfindingCharacters::convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr) +void LLFloaterPathfindingCharacters::buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr)  {  	llassert(pObjectListPtr != NULL);  	llassert(!pObjectListPtr->isEmpty()); -	LLSD scrollListData = LLSD::emptyArray(); -  	for (LLPathfindingObjectList::const_iterator objectIter = pObjectListPtr->begin();	objectIter != pObjectListPtr->end(); ++objectIter)  	{ -		const LLPathfindingCharacter *characterPtr = dynamic_cast<const LLPathfindingCharacter *>(objectIter->second.get()); -		LLSD element = buildCharacterScrollListData(characterPtr); -		scrollListData.append(element); +		const LLPathfindingObjectPtr objectPtr = objectIter->second; +		const LLPathfindingCharacter *characterPtr = dynamic_cast<const LLPathfindingCharacter *>(objectPtr.get()); +		llassert(characterPtr != NULL); -		if (characterPtr->hasOwner() && !characterPtr->hasOwnerName()) -		{ -			rebuildScrollListAfterAvatarNameLoads(characterPtr->getUUID()); -		} +		LLSD scrollListItemData = buildCharacterScrollListItemData(characterPtr); +		addObjectToScrollList(objectPtr, scrollListItemData);  	} - -	return scrollListData;  }  void LLFloaterPathfindingCharacters::updateControlsOnScrollListChange() @@ -168,6 +162,22 @@ S32 LLFloaterPathfindingCharacters::getNameColumnIndex() const  	return 0;  } +S32 LLFloaterPathfindingCharacters::getOwnerNameColumnIndex() const +{ +	return 2; +} + +std::string LLFloaterPathfindingCharacters::getOwnerName(const LLPathfindingObject *pObject) const +{ +	return (pObject->hasOwner() +		? (pObject->hasOwnerName() +		? (pObject->isGroupOwned() +		? (pObject->getOwnerName() + " " + getString("character_owner_group")) +		: pObject->getOwnerName()) +		: getString("character_owner_loading")) +		: getString("character_owner_unknown")); +} +  const LLColor4 &LLFloaterPathfindingCharacters::getBeaconColor() const  {  	return mBeaconColor; @@ -201,9 +211,9 @@ void LLFloaterPathfindingCharacters::onShowPhysicsCapsuleClicked()  	}  } -LLSD LLFloaterPathfindingCharacters::buildCharacterScrollListData(const LLPathfindingCharacter *pCharacterPtr) const +LLSD LLFloaterPathfindingCharacters::buildCharacterScrollListItemData(const LLPathfindingCharacter *pCharacterPtr) const  { -	LLSD columns; +	LLSD columns = LLSD::emptyArray();  	columns[0]["column"] = "name";  	columns[0]["value"] = pCharacterPtr->getName(); @@ -212,13 +222,7 @@ LLSD LLFloaterPathfindingCharacters::buildCharacterScrollListData(const LLPathfi  	columns[1]["value"] = pCharacterPtr->getDescription();  	columns[2]["column"] = "owner"; -	columns[2]["value"] = (pCharacterPtr->hasOwner() -			? (pCharacterPtr->hasOwnerName() -			? (pCharacterPtr->isGroupOwned() -			? (pCharacterPtr->getOwnerName() + " " + getString("character_owner_group")) -			: pCharacterPtr->getOwnerName()) -			: getString("character_owner_loading")) -			: getString("character_owner_unknown")); +	columns[2]["value"] = getOwnerName(pCharacterPtr);  	S32 cpuTime = llround(pCharacterPtr->getCPUTime());  	std::string cpuTimeString = llformat("%d", cpuTime); @@ -231,11 +235,7 @@ LLSD LLFloaterPathfindingCharacters::buildCharacterScrollListData(const LLPathfi  	columns[4]["column"] = "altitude";  	columns[4]["value"] = llformat("%1.0f m", pCharacterPtr->getLocation()[2]); -	LLSD element; -	element["id"] = pCharacterPtr->getUUID().asString(); -	element["column"] = columns; - -	return element; +	return columns;  }  void LLFloaterPathfindingCharacters::updateStateOnDisplayControls() diff --git a/indra/newview/llfloaterpathfindingcharacters.h b/indra/newview/llfloaterpathfindingcharacters.h index ef389ad428..4021f4f119 100644 --- a/indra/newview/llfloaterpathfindingcharacters.h +++ b/indra/newview/llfloaterpathfindingcharacters.h @@ -62,11 +62,13 @@ protected:  	virtual void                       requestGetObjects(); -	virtual LLSD                       convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr); +	virtual void                       buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr);  	virtual void                       updateControlsOnScrollListChange();  	virtual S32                        getNameColumnIndex() const; +	virtual S32                        getOwnerNameColumnIndex() const; +	virtual std::string                getOwnerName(const LLPathfindingObject *pObject) const;  	virtual const LLColor4             &getBeaconColor() const;  	virtual LLPathfindingObjectListPtr getEmptyObjectList() const; @@ -74,7 +76,7 @@ protected:  private:  	void onShowPhysicsCapsuleClicked(); -	LLSD buildCharacterScrollListData(const LLPathfindingCharacter *pCharacterPtr) const; +	LLSD buildCharacterScrollListItemData(const LLPathfindingCharacter *pCharacterPtr) const;  	void updateStateOnDisplayControls();  	void showSelectedCharacterCapsules(); diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 877bd0822d..0fe0e151fb 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -215,7 +215,7 @@ void LLFloaterPathfindingLinksets::requestGetObjects()  	LLPathfindingManager::getInstance()->requestGetLinksets(getNewRequestId(), boost::bind(&LLFloaterPathfindingLinksets::handleNewObjectList, this, _1, _2, _3));  } -LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr) +void LLFloaterPathfindingLinksets::buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr)  {  	llassert(pObjectListPtr != NULL);  	llassert(!pObjectListPtr->isEmpty()); @@ -227,7 +227,6 @@ LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPath  	bool isFilteringDescription = !descriptionFilter.empty();  	bool isFilteringLinksetUse = (linksetUseFilter != LLPathfindingLinkset::kUnknown); -	LLSD scrollListData = LLSD::emptyArray();  	const LLVector3& avatarPosition = gAgent.getPositionAgent();  	if (isFilteringName || isFilteringDescription || isFilteringLinksetUse) @@ -236,22 +235,21 @@ LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPath  		LLStringUtil::toUpper(descriptionFilter);  		for (LLPathfindingObjectList::const_iterator objectIter = pObjectListPtr->begin();	objectIter != pObjectListPtr->end(); ++objectIter)  		{ -			const LLPathfindingLinkset *linksetPtr = dynamic_cast<const LLPathfindingLinkset *>(objectIter->second.get()); +			const LLPathfindingObjectPtr objectPtr = objectIter->second; +			const LLPathfindingLinkset *linksetPtr = dynamic_cast<const LLPathfindingLinkset *>(objectPtr.get()); +			llassert(linksetPtr != NULL); +  			std::string linksetName = (linksetPtr->isTerrain() ? getString("linkset_terrain_name") : linksetPtr->getName());  			std::string linksetDescription = linksetPtr->getDescription();  			LLStringUtil::toUpper(linksetName);  			LLStringUtil::toUpper(linksetDescription); +  			if ((!isFilteringName || (linksetName.find(nameFilter) != std::string::npos)) &&  				(!isFilteringDescription || (linksetDescription.find(descriptionFilter) != std::string::npos)) &&  				(!isFilteringLinksetUse || (linksetPtr->getLinksetUse() == linksetUseFilter)))  			{ -				LLSD element = buildLinksetScrollListData(linksetPtr, avatarPosition); -				scrollListData.append(element); - -				if (linksetPtr->hasOwner() && !linksetPtr->hasOwnerName()) -				{ -					rebuildScrollListAfterAvatarNameLoads(linksetPtr->getUUID()); -				} +				LLSD scrollListItemData = buildLinksetScrollListItemData(linksetPtr, avatarPosition); +				addObjectToScrollList(objectPtr, scrollListItemData);  			}  		}  	} @@ -259,18 +257,14 @@ LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPath  	{  		for (LLPathfindingObjectList::const_iterator objectIter = pObjectListPtr->begin();	objectIter != pObjectListPtr->end(); ++objectIter)  		{ -			const LLPathfindingLinkset *linksetPtr = dynamic_cast<const LLPathfindingLinkset *>(objectIter->second.get()); -			LLSD element = buildLinksetScrollListData(linksetPtr, avatarPosition); -			scrollListData.append(element); +			const LLPathfindingObjectPtr objectPtr = objectIter->second; +			const LLPathfindingLinkset *linksetPtr = dynamic_cast<const LLPathfindingLinkset *>(objectPtr.get()); +			llassert(linksetPtr != NULL); -			if (linksetPtr->hasOwner() && !linksetPtr->hasOwnerName()) -			{ -				rebuildScrollListAfterAvatarNameLoads(linksetPtr->getUUID()); -			} +			LLSD scrollListItemData = buildLinksetScrollListItemData(linksetPtr, avatarPosition); +			addObjectToScrollList(objectPtr, scrollListItemData);  		}  	} - -	return scrollListData;  }  void LLFloaterPathfindingLinksets::updateControlsOnScrollListChange() @@ -286,6 +280,22 @@ S32 LLFloaterPathfindingLinksets::getNameColumnIndex() const  	return 0;  } +S32 LLFloaterPathfindingLinksets::getOwnerNameColumnIndex() const +{ +	return 2; +} + +std::string LLFloaterPathfindingLinksets::getOwnerName(const LLPathfindingObject *pObject) const +{ +	return (pObject->hasOwner() +		? (pObject->hasOwnerName() +		? (pObject->isGroupOwned() +		? (pObject->getOwnerName() + " " + getString("linkset_owner_group")) +		: pObject->getOwnerName()) +		: getString("linkset_owner_loading")) +		: getString("linkset_owner_unknown")); +} +  const LLColor4 &LLFloaterPathfindingLinksets::getBeaconColor() const  {  	return mBeaconColor; @@ -373,10 +383,10 @@ void LLFloaterPathfindingLinksets::updateEditFieldValues()  	}  } -LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListData(const LLPathfindingLinkset *pLinksetPtr, const LLVector3 &pAvatarPosition) const +LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListItemData(const LLPathfindingLinkset *pLinksetPtr, const LLVector3 &pAvatarPosition) const  {  	llassert(pLinksetPtr != NULL); -	LLSD columns; +	LLSD columns = LLSD::emptyArray();  	if (pLinksetPtr->isTerrain())  	{ @@ -389,11 +399,14 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListData(const LLPathfindin  		columns[2]["column"] = "owner";  		columns[2]["value"] = getString("linkset_terrain_owner"); -		columns[3]["column"] = "land_impact"; -		columns[3]["value"] = getString("linkset_terrain_land_impact"); +		columns[3]["column"] = "scripted"; +		columns[3]["value"] = getString("linkset_terrain_scripted"); -		columns[4]["column"] = "dist_from_you"; -		columns[4]["value"] = getString("linkset_terrain_dist_from_you"); +		columns[4]["column"] = "land_impact"; +		columns[4]["value"] = getString("linkset_terrain_land_impact"); + +		columns[5]["column"] = "dist_from_you"; +		columns[5]["value"] = getString("linkset_terrain_dist_from_you");  	}  	else  	{ @@ -404,22 +417,23 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListData(const LLPathfindin  		columns[1]["value"] = pLinksetPtr->getDescription();  		columns[2]["column"] = "owner"; -		columns[2]["value"] = (pLinksetPtr->hasOwner() -			? (pLinksetPtr->hasOwnerName() -			? (pLinksetPtr->isGroupOwned() -			? (pLinksetPtr->getOwnerName() + " " + getString("linkset_owner_group")) -			: pLinksetPtr->getOwnerName()) -			: getString("linkset_owner_loading")) -			: getString("linkset_owner_unknown")); - -		columns[3]["column"] = "land_impact"; -		columns[3]["value"] = llformat("%1d", pLinksetPtr->getLandImpact()); - -		columns[4]["column"] = "dist_from_you"; -		columns[4]["value"] = llformat("%1.0f m", dist_vec(pAvatarPosition, pLinksetPtr->getLocation())); +		columns[2]["value"] = getOwnerName(pLinksetPtr); + +		columns[3]["column"] = "scripted"; +		columns[3]["value"] = (pLinksetPtr->hasIsScripted() +			? (pLinksetPtr->isScripted() +			? getString("linkset_is_scripted") +			: getString("linkset_is_not_scripted")) +			: getString("linkset_is_unknown_scripted")); + +		columns[4]["column"] = "land_impact"; +		columns[4]["value"] = llformat("%1d", pLinksetPtr->getLandImpact()); + +		columns[5]["column"] = "dist_from_you"; +		columns[5]["value"] = llformat("%1.0f m", dist_vec(pAvatarPosition, pLinksetPtr->getLocation()));  	} -	columns[5]["column"] = "linkset_use"; +	columns[6]["column"] = "linkset_use";  	std::string linksetUse = getLinksetUseString(pLinksetPtr->getLinksetUse());  	if (pLinksetPtr->isTerrain())  	{ @@ -437,25 +451,21 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListData(const LLPathfindin  	{  		linksetUse += (" " + getString("linkset_is_restricted_non_volume_state"));  	} -	columns[5]["value"] = linksetUse; - -	columns[6]["column"] = "a_percent"; -	columns[6]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientA()); +	columns[6]["value"] = linksetUse; -	columns[7]["column"] = "b_percent"; -	columns[7]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientB()); +	columns[7]["column"] = "a_percent"; +	columns[7]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientA()); -	columns[8]["column"] = "c_percent"; -	columns[8]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientC()); +	columns[8]["column"] = "b_percent"; +	columns[8]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientB()); -	columns[9]["column"] = "d_percent"; -	columns[9]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientD()); +	columns[9]["column"] = "c_percent"; +	columns[9]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientC()); -	LLSD element; -	element["id"] = pLinksetPtr->getUUID().asString(); -	element["column"] = columns; +	columns[10]["column"] = "d_percent"; +	columns[10]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientD()); -	return element; +	return columns;  }  LLSD LLFloaterPathfindingLinksets::buildLinksetUseScrollListData(const std::string &pLabel, S32 pValue) const @@ -490,6 +500,23 @@ bool LLFloaterPathfindingLinksets::isShowUnmodifiablePhantomWarning(LLPathfindin  	return isShowWarning;  } +bool LLFloaterPathfindingLinksets::isShowPhantomToggleWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const +{ +	bool isShowWarning = false; + +	if (pLinksetUse != LLPathfindingLinkset::kUnknown) +	{ +		LLPathfindingObjectListPtr selectedObjects = getSelectedObjects(); +		if ((selectedObjects != NULL) && !selectedObjects->isEmpty()) +		{ +			const LLPathfindingLinksetList *linksetList = dynamic_cast<const LLPathfindingLinksetList *>(selectedObjects.get()); +			isShowWarning = linksetList->isShowPhantomToggleWarning(pLinksetUse); +		} +	} + +	return isShowWarning; +} +  bool LLFloaterPathfindingLinksets::isShowCannotBeVolumeWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const  {  	bool isShowWarning = false; @@ -559,29 +586,41 @@ void LLFloaterPathfindingLinksets::applyEdit()  {  	LLPathfindingLinkset::ELinksetUse linksetUse = getEditLinksetUse(); +	bool showPhantomToggleWarning = isShowPhantomToggleWarning(linksetUse);  	bool showUnmodifiablePhantomWarning = isShowUnmodifiablePhantomWarning(linksetUse);  	bool showCannotBeVolumeWarning = isShowCannotBeVolumeWarning(linksetUse); -	if (showUnmodifiablePhantomWarning || showCannotBeVolumeWarning) +	if (showPhantomToggleWarning || showUnmodifiablePhantomWarning || showCannotBeVolumeWarning)  	{  		LLPathfindingLinkset::ELinksetUse restrictedLinksetUse = LLPathfindingLinkset::getLinksetUseWithToggledPhantom(linksetUse);  		LLSD substitutions;  		substitutions["REQUESTED_TYPE"] = getLinksetUseString(linksetUse);  		substitutions["RESTRICTED_TYPE"] = getLinksetUseString(restrictedLinksetUse); -		std::string notificationName; -		if (showUnmodifiablePhantomWarning && showCannotBeVolumeWarning) +		// Build one of the following notifications names +		//   - PathfindingLinksets_WarnOnPhantom +		//   - PathfindingLinksets_WarnOnPhantom_MismatchOnRestricted +		//   - PathfindingLinksets_WarnOnPhantom_MismatchOnVolume +		//   - PathfindingLinksets_WarnOnPhantom_MismatchOnRestricted_MismatchOnVolume +		//   - PathfindingLinksets_MismatchOnRestricted +		//   - PathfindingLinksets_MismatchOnVolume +		//   - PathfindingLinksets_MismatchOnRestricted_MismatchOnVolume + +		std::string notificationName = "PathfindingLinksets"; + +		if (showPhantomToggleWarning)  		{ -			notificationName = "PathfindingLinksets_SetLinksetUseMismatchOnRestrictedAndVolume"; +			notificationName += "_WarnOnPhantom";  		} -		else if (showUnmodifiablePhantomWarning) +		if (showUnmodifiablePhantomWarning)  		{ -			notificationName = "PathfindingLinksets_SetLinksetUseMismatchOnRestricted"; +			notificationName += "_MismatchOnRestricted";  		} -		else +		if (showCannotBeVolumeWarning)  		{ -			notificationName = "PathfindingLinksets_SetLinksetUseMismatchOnVolume"; +			notificationName += "_MismatchOnVolume";  		} +  		LLNotificationsUtil::add(notificationName, substitutions, LLSD(), boost::bind(&LLFloaterPathfindingLinksets::handleApplyEdit, this, _1, _2));  	}  	else diff --git a/indra/newview/llfloaterpathfindinglinksets.h b/indra/newview/llfloaterpathfindinglinksets.h index 342a64fc77..6538308122 100644 --- a/indra/newview/llfloaterpathfindinglinksets.h +++ b/indra/newview/llfloaterpathfindinglinksets.h @@ -58,11 +58,13 @@ protected:  	virtual void                       requestGetObjects(); -	virtual LLSD                       convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr); +	virtual void                       buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr);  	virtual void                       updateControlsOnScrollListChange();  	virtual S32                        getNameColumnIndex() const; +	virtual S32                        getOwnerNameColumnIndex() const; +	virtual std::string                getOwnerName(const LLPathfindingObject *pObject) const;  	virtual const LLColor4             &getBeaconColor() const;  	virtual LLPathfindingObjectListPtr getEmptyObjectList() const; @@ -78,10 +80,11 @@ private:  	void clearFilters();  	void updateEditFieldValues(); -	LLSD buildLinksetScrollListData(const LLPathfindingLinkset *pLinksetPtr, const LLVector3 &pAvatarPosition) const; +	LLSD buildLinksetScrollListItemData(const LLPathfindingLinkset *pLinksetPtr, const LLVector3 &pAvatarPosition) const;  	LLSD buildLinksetUseScrollListData(const std::string &pLabel, S32 pValue) const;  	bool isShowUnmodifiablePhantomWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const; +	bool isShowPhantomToggleWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const;  	bool isShowCannotBeVolumeWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const;  	void updateStateOnEditFields(); diff --git a/indra/newview/llfloaterpathfindingobjects.cpp b/indra/newview/llfloaterpathfindingobjects.cpp index e246265be9..20c1215bcb 100644 --- a/indra/newview/llfloaterpathfindingobjects.cpp +++ b/indra/newview/llfloaterpathfindingobjects.cpp @@ -29,6 +29,8 @@  #include "llfloaterpathfindingobjects.h" +#include <string> +#include <map>  #include <vector>  #include <boost/bind.hpp> @@ -96,7 +98,6 @@ void LLFloaterPathfindingObjects::onOpen(const LLSD &pKey)  void LLFloaterPathfindingObjects::onClose(bool pIsAppQuitting)  { -	  	if (mGodLevelChangeSlot.connected())  	{  		mGodLevelChangeSlot.disconnect(); @@ -119,6 +120,11 @@ void LLFloaterPathfindingObjects::onClose(bool pIsAppQuitting)  	{  		mObjectsSelection.clear();  	} + +	if (pIsAppQuitting) +	{ +		clearAllObjects(); +	}  }  void LLFloaterPathfindingObjects::draw() @@ -168,13 +174,13 @@ LLFloaterPathfindingObjects::LLFloaterPathfindingObjects(const LLSD &pSeed)  	mReturnButton(NULL),  	mDeleteButton(NULL),  	mTeleportButton(NULL), -	mLoadingAvatarNames(),  	mDefaultBeaconColor(),  	mDefaultBeaconTextColor(),  	mErrorTextColor(),  	mWarningTextColor(),  	mMessagingState(kMessagingUnknown),  	mMessagingRequestId(0U), +	mMissingNameObjectsScrollListItems(),  	mObjectList(),  	mObjectsSelection(),  	mHasObjectsToBeSelected(false), @@ -186,6 +192,7 @@ LLFloaterPathfindingObjects::LLFloaterPathfindingObjects(const LLSD &pSeed)  LLFloaterPathfindingObjects::~LLFloaterPathfindingObjects()  { +	clearAllObjects();  }  BOOL LLFloaterPathfindingObjects::postBuild() @@ -343,54 +350,21 @@ void LLFloaterPathfindingObjects::rebuildObjectsScrollList()  	S32 origScrollPosition = mObjectsScrollList->getScrollPos();  	mObjectsScrollList->deleteAllItems(); +	mMissingNameObjectsScrollListItems.clear();  	if ((mObjectList != NULL) && !mObjectList->isEmpty())  	{ -		LLSD scrollListData = convertObjectsIntoScrollListData(mObjectList); -		llassert(scrollListData.isArray()); +		buildObjectsScrollList(mObjectList); -		LLScrollListCell::Params cellParams; -		cellParams.font = LLFontGL::getFontSansSerif(); - -		for (LLSD::array_const_iterator rowElementIter = scrollListData.beginArray(); rowElementIter != scrollListData.endArray(); ++rowElementIter) +		mObjectsScrollList->selectMultiple(mObjectsToBeSelected); +		if (mHasObjectsToBeSelected)  		{ -			const LLSD &rowElement = *rowElementIter; - -			LLScrollListItem::Params rowParams; -			llassert(rowElement.has("id")); -			llassert(rowElement.get("id").isString()); -			rowParams.value = rowElement.get("id"); - -			llassert(rowElement.has("column")); -			llassert(rowElement.get("column").isArray()); -			const LLSD &columnElement = rowElement.get("column"); -			for (LLSD::array_const_iterator cellIter = columnElement.beginArray(); cellIter != columnElement.endArray(); ++cellIter) -			{ -				const LLSD &cellElement = *cellIter; - -				llassert(cellElement.has("column")); -				llassert(cellElement.get("column").isString()); -				cellParams.column = cellElement.get("column").asString(); - -				llassert(cellElement.has("value")); -				llassert(cellElement.get("value").isString()); -				cellParams.value = cellElement.get("value").asString(); - -				rowParams.columns.add(cellParams); -			} - -			mObjectsScrollList->addRow(rowParams); +			mObjectsScrollList->scrollToShowSelected(); +		} +		else +		{ +			mObjectsScrollList->setScrollPos(origScrollPosition);  		} -	} - -	mObjectsScrollList->selectMultiple(mObjectsToBeSelected); -	if (mHasObjectsToBeSelected) -	{ -		mObjectsScrollList->scrollToShowSelected(); -	} -	else -	{ -		mObjectsScrollList->setScrollPos(origScrollPosition);  	}  	mObjectsToBeSelected.clear(); @@ -399,20 +373,42 @@ void LLFloaterPathfindingObjects::rebuildObjectsScrollList()  	updateControlsOnScrollListChange();  } -LLSD LLFloaterPathfindingObjects::convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr) +void LLFloaterPathfindingObjects::buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr)  {  	llassert(0); -	LLSD nullObjs = LLSD::emptyArray(); -	return nullObjs;  } -void LLFloaterPathfindingObjects::rebuildScrollListAfterAvatarNameLoads(const LLUUID &pAvatarId) +void LLFloaterPathfindingObjects::addObjectToScrollList(const LLPathfindingObjectPtr pObjectPtr, const LLSD &pScrollListItemData)  { -	std::set<LLUUID>::const_iterator iter = mLoadingAvatarNames.find(pAvatarId); -	if (iter == mLoadingAvatarNames.end()) +	LLScrollListCell::Params cellParams; +	cellParams.font = LLFontGL::getFontSansSerif(); + +	LLScrollListItem::Params rowParams; +	rowParams.value = pObjectPtr->getUUID().asString(); + +	llassert(pScrollListItemData.isArray()); +	for (LLSD::array_const_iterator cellIter = pScrollListItemData.beginArray(); +		cellIter != pScrollListItemData.endArray(); ++cellIter) +	{ +		const LLSD &cellElement = *cellIter; + +		llassert(cellElement.has("column")); +		llassert(cellElement.get("column").isString()); +		cellParams.column = cellElement.get("column").asString(); + +		llassert(cellElement.has("value")); +		llassert(cellElement.get("value").isString()); +		cellParams.value = cellElement.get("value").asString(); + +		rowParams.columns.add(cellParams); +	} + +	LLScrollListItem *scrollListItem = mObjectsScrollList->addRow(rowParams); + +	if (pObjectPtr->hasOwner() && !pObjectPtr->hasOwnerName())  	{ -		mLoadingAvatarNames.insert(pAvatarId); -		LLAvatarNameCache::get(pAvatarId, boost::bind(&LLFloaterPathfindingObjects::handleAvatarNameLoads, this, _1, _2)); +		mMissingNameObjectsScrollListItems.insert(std::make_pair<std::string, LLScrollListItem *>(pObjectPtr->getUUID().asString(), scrollListItem)); +		pObjectPtr->registerOwnerNameListener(boost::bind(&LLFloaterPathfindingObjects::handleObjectNameResponse, this, _1));  	}  } @@ -434,6 +430,18 @@ S32 LLFloaterPathfindingObjects::getNameColumnIndex() const  	return 0;  } +S32 LLFloaterPathfindingObjects::getOwnerNameColumnIndex() const +{ +	return 2; +} + +std::string LLFloaterPathfindingObjects::getOwnerName(const LLPathfindingObject *pObject) const +{ +	llassert(0); +	std::string returnVal; +	return returnVal; +} +  const LLColor4 &LLFloaterPathfindingObjects::getBeaconColor() const  {  	return mDefaultBeaconColor; @@ -496,6 +504,7 @@ void LLFloaterPathfindingObjects::clearAllObjects()  {  	selectNoneObjects();  	mObjectsScrollList->deleteAllItems(); +	mMissingNameObjectsScrollListItems.clear();  	mObjectList.reset();  } @@ -683,13 +692,22 @@ void LLFloaterPathfindingObjects::onGodLevelChange(U8 pGodLevel)  	requestGetObjects();  } -void LLFloaterPathfindingObjects::handleAvatarNameLoads(const LLUUID &pAvatarId, const LLAvatarName &pAvatarName) +void LLFloaterPathfindingObjects::handleObjectNameResponse(const LLPathfindingObject *pObject)  { -	llassert(mLoadingAvatarNames.find(pAvatarId) != mLoadingAvatarNames.end()); -	mLoadingAvatarNames.erase(pAvatarId); -	if (mLoadingAvatarNames.empty()) +	llassert(pObject != NULL); +	const std::string uuid = pObject->getUUID().asString(); +	scroll_list_item_map::iterator scrollListItemIter = mMissingNameObjectsScrollListItems.find(uuid); +	if (scrollListItemIter != mMissingNameObjectsScrollListItems.end())  	{ -		rebuildObjectsScrollList(); +		LLScrollListItem *scrollListItem = scrollListItemIter->second; +		llassert(scrollListItem != NULL); + +		LLScrollListCell *scrollListCell = scrollListItem->getColumn(getOwnerNameColumnIndex()); +		LLSD ownerName = getOwnerName(pObject); + +		scrollListCell->setValue(ownerName); + +		mMissingNameObjectsScrollListItems.erase(scrollListItemIter);  	}  } diff --git a/indra/newview/llfloaterpathfindingobjects.h b/indra/newview/llfloaterpathfindingobjects.h index e8d446b598..4024e15fd6 100644 --- a/indra/newview/llfloaterpathfindingobjects.h +++ b/indra/newview/llfloaterpathfindingobjects.h @@ -27,7 +27,8 @@  #ifndef LL_LLFLOATERPATHFINDINGOBJECTS_H  #define LL_LLFLOATERPATHFINDINGOBJECTS_H -#include <set> +#include <string> +#include <map>  #include <boost/signals2.hpp> @@ -80,14 +81,15 @@ protected:  	void                               handleUpdateObjectList(LLPathfindingManager::request_id_t pRequestId, LLPathfindingManager::ERequestStatus pRequestStatus, LLPathfindingObjectListPtr pObjectList);  	void                               rebuildObjectsScrollList(); -	virtual LLSD                       convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr); - -	void                               rebuildScrollListAfterAvatarNameLoads(const LLUUID &pAvatarId); +	virtual void                       buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr); +	void                               addObjectToScrollList(const LLPathfindingObjectPtr pObjectPr, const LLSD &pScrollListItemData);  	virtual void                       updateControlsOnScrollListChange();  	virtual void                       updateControlsOnInWorldSelectionChange();  	virtual S32                        getNameColumnIndex() const; +	virtual S32                        getOwnerNameColumnIndex() const; +	virtual std::string                getOwnerName(const LLPathfindingObject *pObject) const;  	virtual const LLColor4             &getBeaconColor() const;  	virtual const LLColor4             &getBeaconTextColor() const;  	virtual S32                        getBeaconWidth() const; @@ -126,7 +128,7 @@ private:  	void                   onRegionBoundaryCrossed();  	void                   onGodLevelChange(U8 pGodLevel); -	void                   handleAvatarNameLoads(const LLUUID &pAvatarId, const LLAvatarName &pAvatarName); +	void                   handleObjectNameResponse(const LLPathfindingObject *pObject);  	void                   updateMessagingStatus();  	void                   updateStateOnListControls(); @@ -151,8 +153,6 @@ private:  	LLButton                           *mDeleteButton;  	LLButton                           *mTeleportButton; -	std::set<LLUUID>                   mLoadingAvatarNames; -  	LLColor4                           mDefaultBeaconColor;  	LLColor4                           mDefaultBeaconTextColor;  	LLColor4                           mErrorTextColor; @@ -161,6 +161,9 @@ private:  	EMessagingState                    mMessagingState;  	LLPathfindingManager::request_id_t mMessagingRequestId; +	typedef std::map<std::string, LLScrollListItem *> scroll_list_item_map; +	scroll_list_item_map               mMissingNameObjectsScrollListItems; +  	LLPathfindingObjectListPtr         mObjectList;  	LLObjectSelectionHandle            mObjectsSelection; diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp index 99ebb0eb34..48484786f6 100644 --- a/indra/newview/llfloatertools.cpp +++ b/indra/newview/llfloatertools.cpp @@ -133,7 +133,6 @@ public:  		if(tools_floater)  		{  			tools_floater->updateLandImpacts(); -			tools_floater->dirty();  		}  	}  }; diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 27dfbba561..ddeb33d0ba 100755 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -71,6 +71,9 @@  #include "llviewerwindow.h"  #include "llvoavatarself.h"  #include "llwearablelist.h" +#include "lllandmarkactions.h" + +void copy_slurl_to_clipboard_callback_inv(const std::string& slurl);  // Marketplace outbox current disabled  #define ENABLE_MERCHANT_OUTBOX_CONTEXT_MENU	1 @@ -1397,6 +1400,29 @@ void LLItemBridge::performAction(LLInventoryModel* model, std::string action)  		const LLUUID outbox_id = getInventoryModel()->findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false, false);  		copy_item_to_outbox(itemp, outbox_id, LLUUID::null, LLToolDragAndDrop::getOperationId());  	} +	else if ("copy_slurl" == action) +	{ +		LLViewerInventoryItem* item = static_cast<LLViewerInventoryItem*>(getItem()); +		if(item) +		{ +			LLUUID asset_id = item->getAssetUUID(); +			LLLandmark* landmark = gLandmarkList.getAsset(asset_id); +			if (landmark) +			{ +				LLVector3d global_pos; +				landmark->getGlobalPos(global_pos); +				LLLandmarkActions::getSLURLfromPosGlobal(global_pos, ©_slurl_to_clipboard_callback_inv, true); +			} +		} +	} +} + +void copy_slurl_to_clipboard_callback_inv(const std::string& slurl) +{ +	gViewerWindow->getWindow()->copyTextToClipboard(utf8str_to_wstring(slurl)); +	LLSD args; +	args["SLURL"] = slurl; +	LLNotificationsUtil::add("CopySLURL", args);  }  void LLItemBridge::selectItem() @@ -4401,6 +4427,7 @@ void LLLandmarkBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  		}  		items.push_back(std::string("Landmark Separator")); +		items.push_back(std::string("url_copy"));  		items.push_back(std::string("About Landmark"));  	} @@ -4409,6 +4436,7 @@ void LLLandmarkBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  	// info panel can be shown at a time.  	if ((flags & FIRST_SELECTED_ITEM) == 0)  	{ +		disabled_items.push_back(std::string("url_copy"));  		disabled_items.push_back(std::string("About Landmark"));  	} diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index c37343e678..8f36234c39 100644 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -197,6 +197,8 @@ public:  				 const LLUUID& uuid) :  		LLInvFVBridge(inventory, root, uuid) {} +	typedef boost::function<void(std::string& slurl)> slurl_callback_t; +  	virtual void performAction(LLInventoryModel* model, std::string action);  	virtual void selectItem();  	virtual void restoreItem(); @@ -214,7 +216,6 @@ public:  	virtual BOOL isItemCopyable() const;  	virtual BOOL hasChildren() const { return FALSE; }  	virtual BOOL isUpToDate() const { return TRUE; } -  	/*virtual*/ void clearDisplayName() { mDisplayName.clear(); }  	LLViewerInventoryItem* getItem() const; diff --git a/indra/newview/llmutelist.cpp b/indra/newview/llmutelist.cpp index a7059eb519..54522bb7f6 100644 --- a/indra/newview/llmutelist.cpp +++ b/indra/newview/llmutelist.cpp @@ -44,6 +44,8 @@  #include "llmutelist.h" +#include "pipeline.h" +  #include <boost/tokenizer.hpp>  #include "lldispatcher.h" @@ -192,6 +194,23 @@ BOOL LLMuteList::isLinden(const std::string& name) const  	return last_name == "Linden";  } +static LLVOAvatar* find_avatar(const LLUUID& id) +{ +	LLViewerObject *obj = gObjectList.findObject(id); +	while (obj && obj->isAttachment()) +	{ +		obj = (LLViewerObject *)obj->getParent(); +	} + +	if (obj && obj->isAvatar()) +	{ +		return (LLVOAvatar*)obj; +	} +	else +	{ +		return NULL; +	} +}  BOOL LLMuteList::add(const LLMute& mute, U32 flags)  { @@ -288,6 +307,12 @@ BOOL LLMuteList::add(const LLMute& mute, U32 flags)  						LLViewerPartSim::getInstance()->clearParticlesByOwnerID(localmute.mID);  					}  				} +				//mute local lights that are attached to the avatar +				LLVOAvatar *avatarp = find_avatar(localmute.mID); +				if (avatarp) +				{ +					LLPipeline::removeMutedAVsLights(avatarp); +				}  				return TRUE;  			}  		} diff --git a/indra/newview/llpathfindinglinkset.cpp b/indra/newview/llpathfindinglinkset.cpp index fe4daabd89..50b76378f5 100644 --- a/indra/newview/llpathfindinglinkset.cpp +++ b/indra/newview/llpathfindinglinkset.cpp @@ -39,6 +39,7 @@  #define LINKSET_MODIFIABLE_FIELD    "modifiable"  #define LINKSET_CATEGORY_FIELD      "navmesh_category"  #define LINKSET_CAN_BE_VOLUME       "can_be_volume" +#define LINKSET_IS_SCRIPTED_FIELD   "is_scripted"  #define LINKSET_PHANTOM_FIELD       "phantom"  #define LINKSET_WALKABILITY_A_FIELD "A"  #define LINKSET_WALKABILITY_B_FIELD "B" @@ -62,6 +63,8 @@ LLPathfindingLinkset::LLPathfindingLinkset(const LLSD& pTerrainData)  	mLandImpact(0U),  	mIsModifiable(FALSE),  	mCanBeVolume(FALSE), +	mIsScripted(FALSE), +	mHasIsScripted(TRUE),  	mLinksetUse(kUnknown),  	mWalkabilityCoefficientA(MIN_WALKABILITY_VALUE),  	mWalkabilityCoefficientB(MIN_WALKABILITY_VALUE), @@ -77,6 +80,8 @@ LLPathfindingLinkset::LLPathfindingLinkset(const std::string &pUUID, const LLSD&  	mLandImpact(0U),  	mIsModifiable(TRUE),  	mCanBeVolume(TRUE), +	mIsScripted(FALSE), +	mHasIsScripted(FALSE),  	mLinksetUse(kUnknown),  	mWalkabilityCoefficientA(MIN_WALKABILITY_VALUE),  	mWalkabilityCoefficientB(MIN_WALKABILITY_VALUE), @@ -93,6 +98,8 @@ LLPathfindingLinkset::LLPathfindingLinkset(const LLPathfindingLinkset& pOther)  	mLandImpact(pOther.mLandImpact),  	mIsModifiable(pOther.mIsModifiable),  	mCanBeVolume(pOther.mCanBeVolume), +	mIsScripted(pOther.mIsScripted), +	mHasIsScripted(pOther.mHasIsScripted),  	mLinksetUse(pOther.mLinksetUse),  	mWalkabilityCoefficientA(pOther.mWalkabilityCoefficientA),  	mWalkabilityCoefficientB(pOther.mWalkabilityCoefficientB), @@ -113,6 +120,8 @@ LLPathfindingLinkset& LLPathfindingLinkset::operator =(const LLPathfindingLinkse  	mLandImpact = pOther.mLandImpact;  	mIsModifiable = pOther.mIsModifiable;  	mCanBeVolume = pOther.mCanBeVolume; +	mIsScripted = pOther.mIsScripted; +	mHasIsScripted = pOther.mHasIsScripted;  	mLinksetUse = pOther.mLinksetUse;  	mWalkabilityCoefficientA = pOther.mWalkabilityCoefficientA;  	mWalkabilityCoefficientB = pOther.mWalkabilityCoefficientB; @@ -140,6 +149,11 @@ bool LLPathfindingLinkset::isShowUnmodifiablePhantomWarning(ELinksetUse pLinkset  	return (!isModifiable() && (isPhantom() != isPhantom(pLinksetUse)));  } +bool LLPathfindingLinkset::isShowPhantomToggleWarning(ELinksetUse pLinksetUse) const +{ +	return (isModifiable() && (isPhantom() != isPhantom(pLinksetUse))); +} +  bool LLPathfindingLinkset::isShowCannotBeVolumeWarning(ELinksetUse pLinksetUse) const  {  	return (!canBeVolume() && ((pLinksetUse == kMaterialVolume) || (pLinksetUse == kExclusionVolume))); @@ -193,6 +207,13 @@ void LLPathfindingLinkset::parseLinksetData(const LLSD &pLinksetData)  	llassert(pLinksetData.has(LINKSET_MODIFIABLE_FIELD));  	llassert(pLinksetData.get(LINKSET_MODIFIABLE_FIELD).isBoolean());  	mIsModifiable = pLinksetData.get(LINKSET_MODIFIABLE_FIELD).asBoolean(); + +	mHasIsScripted = pLinksetData.has(LINKSET_IS_SCRIPTED_FIELD); +	if (mHasIsScripted) +	{ +		llassert(pLinksetData.get(LINKSET_IS_SCRIPTED_FIELD).isBoolean()); +		mIsScripted = pLinksetData.get(LINKSET_IS_SCRIPTED_FIELD).asBoolean(); +	}  }  void LLPathfindingLinkset::parsePathfindingData(const LLSD &pLinksetData) diff --git a/indra/newview/llpathfindinglinkset.h b/indra/newview/llpathfindinglinkset.h index 73b4d6bad4..308a3a1e0f 100644 --- a/indra/newview/llpathfindinglinkset.h +++ b/indra/newview/llpathfindinglinkset.h @@ -63,12 +63,16 @@ public:  	inline ELinksetUse getLinksetUse() const               {return mLinksetUse;}; +	inline BOOL        isScripted() const                  {return mIsScripted;}; +	inline BOOL        hasIsScripted() const               {return mHasIsScripted;}; +  	inline S32         getWalkabilityCoefficientA() const  {return mWalkabilityCoefficientA;};  	inline S32         getWalkabilityCoefficientB() const  {return mWalkabilityCoefficientB;};  	inline S32         getWalkabilityCoefficientC() const  {return mWalkabilityCoefficientC;};  	inline S32         getWalkabilityCoefficientD() const  {return mWalkabilityCoefficientD;};  	bool               isShowUnmodifiablePhantomWarning(ELinksetUse pLinksetUse) const; +	bool               isShowPhantomToggleWarning(ELinksetUse pLinksetUse) const;  	bool               isShowCannotBeVolumeWarning(ELinksetUse pLinksetUse) const;  	LLSD               encodeAlteredFields(ELinksetUse pLinksetUse, S32 pA, S32 pB, S32 pC, S32 pD) const; @@ -98,6 +102,8 @@ private:  	U32          mLandImpact;  	BOOL         mIsModifiable;  	BOOL         mCanBeVolume; +	BOOL         mIsScripted; +	BOOL         mHasIsScripted;  	ELinksetUse  mLinksetUse;  	S32          mWalkabilityCoefficientA;  	S32          mWalkabilityCoefficientB; diff --git a/indra/newview/llpathfindinglinksetlist.cpp b/indra/newview/llpathfindinglinksetlist.cpp index 746fa342a1..b886e46765 100644 --- a/indra/newview/llpathfindinglinksetlist.cpp +++ b/indra/newview/llpathfindinglinksetlist.cpp @@ -113,6 +113,20 @@ bool LLPathfindingLinksetList::isShowUnmodifiablePhantomWarning(LLPathfindingLin  	return isShowWarning;  } +bool LLPathfindingLinksetList::isShowPhantomToggleWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const +{ +	bool isShowWarning = false; + +	for (const_iterator objectIter = begin(); !isShowWarning && (objectIter != end()); ++objectIter) +	{ +		const LLPathfindingObjectPtr objectPtr = objectIter->second; +		const LLPathfindingLinkset *linkset = dynamic_cast<const LLPathfindingLinkset *>(objectPtr.get()); +		isShowWarning = linkset->isShowPhantomToggleWarning(pLinksetUse); +	} + +	return isShowWarning; +} +  bool LLPathfindingLinksetList::isShowCannotBeVolumeWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const  {  	bool isShowWarning = false; diff --git a/indra/newview/llpathfindinglinksetlist.h b/indra/newview/llpathfindinglinksetlist.h index 77c6358640..1d38e4c11a 100644 --- a/indra/newview/llpathfindinglinksetlist.h +++ b/indra/newview/llpathfindinglinksetlist.h @@ -43,6 +43,7 @@ public:  	LLSD encodeTerrainFields(LLPathfindingLinkset::ELinksetUse pLinksetUse, S32 pA, S32 pB, S32 pC, S32 pD) const;  	bool isShowUnmodifiablePhantomWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const; +	bool isShowPhantomToggleWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const;  	bool isShowCannotBeVolumeWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const;  	void determinePossibleStates(BOOL &pCanBeWalkable, BOOL &pCanBeStaticObstacle, BOOL &pCanBeDynamicObstacle, diff --git a/indra/newview/llpathfindingobject.cpp b/indra/newview/llpathfindingobject.cpp index 916eceb4c8..858d3203c0 100644 --- a/indra/newview/llpathfindingobject.cpp +++ b/indra/newview/llpathfindingobject.cpp @@ -55,8 +55,10 @@ LLPathfindingObject::LLPathfindingObject()  	mOwnerUUID(),  	mHasOwnerName(false),  	mOwnerName(), +	mAvatarNameCacheConnection(),  	mIsGroupOwned(false), -	mLocation() +	mLocation(), +	mOwnerNameSignal()  {  } @@ -67,8 +69,10 @@ LLPathfindingObject::LLPathfindingObject(const std::string &pUUID, const LLSD &p  	mOwnerUUID(),  	mHasOwnerName(false),  	mOwnerName(), +	mAvatarNameCacheConnection(),  	mIsGroupOwned(false), -	mLocation() +	mLocation(), +	mOwnerNameSignal()  {  	parseObjectData(pObjectData);  } @@ -80,14 +84,17 @@ LLPathfindingObject::LLPathfindingObject(const LLPathfindingObject& pOther)  	mOwnerUUID(pOther.mOwnerUUID),  	mHasOwnerName(false),  	mOwnerName(), +	mAvatarNameCacheConnection(),  	mIsGroupOwned(pOther.mIsGroupOwned), -	mLocation(pOther.mLocation) +	mLocation(pOther.mLocation), +	mOwnerNameSignal()  {  	fetchOwnerName();  }  LLPathfindingObject::~LLPathfindingObject()  { +	disconnectAvatarNameCacheConnection();  }  LLPathfindingObject &LLPathfindingObject::operator =(const LLPathfindingObject& pOther) @@ -115,6 +122,23 @@ std::string LLPathfindingObject::getOwnerName() const  	return ownerName;  } +LLPathfindingObject::name_connection_t LLPathfindingObject::registerOwnerNameListener(name_callback_t pOwnerNameCallback) +{ +	llassert(hasOwner()); + +	name_connection_t connection; +	if (hasOwnerName()) +	{ +		pOwnerNameCallback(this); +	} +	else +	{ +		connection = mOwnerNameSignal.connect(pOwnerNameCallback); +	} + +	return connection; +} +  void LLPathfindingObject::parseObjectData(const LLSD &pObjectData)  {  	llassert(pObjectData.has(PATHFINDING_OBJECT_NAME_FIELD)); @@ -149,7 +173,7 @@ void LLPathfindingObject::fetchOwnerName()  		mHasOwnerName = LLAvatarNameCache::get(mOwnerUUID, &mOwnerName);  		if (!mHasOwnerName)  		{ -			LLAvatarNameCache::get(mOwnerUUID, boost::bind(&LLPathfindingObject::handleAvatarNameFetch, this, _1, _2)); +			mAvatarNameCacheConnection = LLAvatarNameCache::get(mOwnerUUID, boost::bind(&LLPathfindingObject::handleAvatarNameFetch, this, _1, _2));  		}  	}  } @@ -157,6 +181,19 @@ void LLPathfindingObject::fetchOwnerName()  void LLPathfindingObject::handleAvatarNameFetch(const LLUUID &pOwnerUUID, const LLAvatarName &pAvatarName)  {  	llassert(mOwnerUUID == pOwnerUUID); +  	mOwnerName = pAvatarName;  	mHasOwnerName = true; + +	disconnectAvatarNameCacheConnection(); + +	mOwnerNameSignal(this); +} + +void LLPathfindingObject::disconnectAvatarNameCacheConnection() +{ +	if (mAvatarNameCacheConnection.connected()) +	{ +		mAvatarNameCacheConnection.disconnect(); +	}  } diff --git a/indra/newview/llpathfindingobject.h b/indra/newview/llpathfindingobject.h index d45cc554fd..b8d3ca2364 100644 --- a/indra/newview/llpathfindingobject.h +++ b/indra/newview/llpathfindingobject.h @@ -30,8 +30,11 @@  #include <string>  #include <boost/shared_ptr.hpp> +#include <boost/function.hpp> +#include <boost/signals2.hpp>  #include "llavatarname.h" +#include "llavatarnamecache.h"  #include "lluuid.h"  #include "v3math.h" @@ -59,6 +62,12 @@ public:  	inline BOOL               isGroupOwned() const   {return mIsGroupOwned;};  	inline const LLVector3&   getLocation() const    {return mLocation;}; +	typedef boost::function<void (const LLPathfindingObject *)>         name_callback_t; +	typedef boost::signals2::signal<void (const LLPathfindingObject *)> name_signal_t; +	typedef boost::signals2::connection                                 name_connection_t; + +	name_connection_t registerOwnerNameListener(name_callback_t pOwnerNameCallback); +  protected:  private: @@ -66,15 +75,18 @@ private:  	void fetchOwnerName();  	void handleAvatarNameFetch(const LLUUID &pOwnerUUID, const LLAvatarName &pAvatarName); +	void disconnectAvatarNameCacheConnection(); -	LLUUID       mUUID; -	std::string  mName; -	std::string  mDescription; -	LLUUID       mOwnerUUID; -	bool         mHasOwnerName; -	LLAvatarName mOwnerName; -	BOOL         mIsGroupOwned; -	LLVector3    mLocation; +	LLUUID                                   mUUID; +	std::string                              mName; +	std::string                              mDescription; +	LLUUID                                   mOwnerUUID; +	bool                                     mHasOwnerName; +	LLAvatarName                             mOwnerName; +	LLAvatarNameCache::callback_connection_t mAvatarNameCacheConnection; +	BOOL                                     mIsGroupOwned; +	LLVector3                                mLocation; +	name_signal_t                            mOwnerNameSignal;  };  #endif // LL_LLPATHFINDINGOBJECT_H diff --git a/indra/newview/llpathfindingobjectlist.cpp b/indra/newview/llpathfindingobjectlist.cpp index 68a7e736e6..f1ecb45fc0 100644 --- a/indra/newview/llpathfindingobjectlist.cpp +++ b/indra/newview/llpathfindingobjectlist.cpp @@ -45,6 +45,7 @@ LLPathfindingObjectList::LLPathfindingObjectList()  LLPathfindingObjectList::~LLPathfindingObjectList()  { +	clear();  }  bool LLPathfindingObjectList::isEmpty() const @@ -52,6 +53,15 @@ bool LLPathfindingObjectList::isEmpty() const  	return mObjectMap.empty();  } +void LLPathfindingObjectList::clear() +{ +	for (LLPathfindingObjectMap::iterator objectIter = mObjectMap.begin(); objectIter != mObjectMap.end(); ++objectIter) +	{ +		objectIter->second.reset(); +	} +	mObjectMap.clear(); +} +  void LLPathfindingObjectList::update(LLPathfindingObjectPtr pUpdateObjectPtr)  {  	if (pUpdateObjectPtr != NULL) diff --git a/indra/newview/llpathfindingobjectlist.h b/indra/newview/llpathfindingobjectlist.h index 3ad8e8b096..61580582d3 100644 --- a/indra/newview/llpathfindingobjectlist.h +++ b/indra/newview/llpathfindingobjectlist.h @@ -47,6 +47,8 @@ public:  	bool isEmpty() const; +	void clear(); +  	void update(LLPathfindingObjectPtr pUpdateObjectPtr);  	void update(LLPathfindingObjectListPtr pUpdateObjectListPtr); @@ -56,7 +58,6 @@ public:  	const_iterator begin() const;  	const_iterator end() const; -  protected:  	LLPathfindingObjectMap &getObjectMap(); diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index 89240c982f..ff69c6e9fd 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -469,7 +469,7 @@ void LLStatusBar::onMouseEnterVolume()  	LLRect vol_btn_rect = volbtn->getRect();  	LLRect volume_pulldown_rect = mPanelVolumePulldown->getRect();  	volume_pulldown_rect.setLeftTopAndSize(vol_btn_rect.mLeft - -	     (volume_pulldown_rect.getWidth() - vol_btn_rect.getWidth())/2, +	     (volume_pulldown_rect.getWidth() - vol_btn_rect.getWidth()),  			       vol_btn_rect.mBottom,  			       volume_pulldown_rect.getWidth(),  			       volume_pulldown_rect.getHeight()); diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp index d629f3abac..602b924398 100644 --- a/indra/newview/lltoastnotifypanel.cpp +++ b/indra/newview/lltoastnotifypanel.cpp @@ -334,32 +334,24 @@ void LLToastNotifyPanel::updateButtonsLayout(const std::vector<index_button_pair  	}  	U32 ignore_btn_width = 0; +	U32 mute_btn_pad = 0;  	if (mIsScriptDialog && ignore_btn != NULL)  	{  		LLRect ignore_btn_rect(ignore_btn->getRect()); -		S32 buttons_per_row = max_width / BUTTON_WIDTH; //assume that h_pad far less than BUTTON_WIDTH -		S32 ignore_btn_left = buttons_per_row * BUTTON_WIDTH + (buttons_per_row	- 1) * h_pad - ignore_btn_rect.getWidth(); -		if (ignore_btn_left + ignore_btn_rect.getWidth() > max_width)// make sure that the ignore button is in panel -		{ -			ignore_btn_left = max_width - ignore_btn_rect.getWidth() - 2 * HPAD; -		} +		S32 ignore_btn_left = max_width - ignore_btn_rect.getWidth();  		ignore_btn_rect.setOriginAndSize(ignore_btn_left, BOTTOM_PAD,// always move ignore button at the bottom  				ignore_btn_rect.getWidth(), ignore_btn_rect.getHeight());  		ignore_btn->setRect(ignore_btn_rect);  		ignore_btn_width = ignore_btn_rect.getWidth();  		mControlPanel->addChild(ignore_btn, -1); +		mute_btn_pad = 4 * HPAD; //only use a 4 * HPAD padding if an ignore button exists  	}  	if (mIsScriptDialog && mute_btn != NULL)  	{  		LLRect mute_btn_rect(mute_btn->getRect()); -		S32 buttons_per_row = max_width / BUTTON_WIDTH; //assume that h_pad far less than BUTTON_WIDTH  		// Place mute (Block) button to the left of the ignore button. -		S32 mute_btn_left = buttons_per_row * BUTTON_WIDTH + (buttons_per_row	- 1) * h_pad - mute_btn_rect.getWidth() - ignore_btn_width - (h_pad / 2); -		if (mute_btn_left + mute_btn_rect.getWidth() > max_width) // make sure that the mute button is in panel -		{ -			mute_btn_left = max_width - mute_btn_rect.getWidth() - 2 * HPAD; -		} +		S32 mute_btn_left = max_width - mute_btn_rect.getWidth() - ignore_btn_width - mute_btn_pad;  		mute_btn_rect.setOriginAndSize(mute_btn_left, BOTTOM_PAD,// always move mute button at the bottom  				mute_btn_rect.getWidth(), mute_btn_rect.getHeight());  		mute_btn->setRect(mute_btn_rect); diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index fe0141e307..0bf039224c 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -2043,7 +2043,14 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,  	{  		if (new_angv != old_angv)  		{ -			resetRot(); +			if (flagUsePhysics()) +			{ +				resetRot(); +			} +			else +			{ +				resetRotTime(); +			}  		}  		// Set the rotation of the object followed by adjusting for the accumulated angular velocity (llSetTargetOmega) @@ -5456,9 +5463,14 @@ void LLViewerObject::applyAngularVelocity(F32 dt)  	}  } -void LLViewerObject::resetRot() +void LLViewerObject::resetRotTime()  {  	mRotTime = 0.0f; +} + +void LLViewerObject::resetRot() +{ +	resetRotTime();  	// Reset the accumulated angular velocity rotation  	mAngularVelocityRot.loadIdentity();  diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index dc8c7deea9..dd02dce716 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -198,6 +198,9 @@ public:  	virtual BOOL		updateLOD();  	virtual BOOL		setDrawableParent(LLDrawable* parentp);  	F32					getRotTime() { return mRotTime; } +private: +	void				resetRotTime(); +public:  	void				resetRot();  	void				applyAngularVelocity(F32 dt); @@ -210,7 +213,7 @@ public:  	LLViewerRegion* getRegion() const				{ return mRegionp; }  	BOOL isSelected() const							{ return mUserSelected; } -	virtual void setSelected(BOOL sel)				{ mUserSelected = sel; mRotTime = 0.f;} +	virtual void setSelected(BOOL sel)				{ mUserSelected = sel; resetRot();}  	const LLUUID &getID() const						{ return mID; }  	U32 getLocalID() const							{ return mLocalID; } diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp index 0077632b4a..4cdb568d17 100644 --- a/indra/newview/llviewerparcelmgr.cpp +++ b/indra/newview/llviewerparcelmgr.cpp @@ -1658,9 +1658,6 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use  			// Request access list information for this land  			parcel_mgr.sendParcelAccessListRequest(AL_ACCESS | AL_BAN); -			// Request the media url filter list for this land -			parcel_mgr.requestParcelMediaURLFilter(); -  			// Request dwell for this land, if it's not public land.  			parcel_mgr.mSelectedDwell = DWELL_NAN;  			if (0 != local_id) @@ -1989,67 +1986,6 @@ void LLViewerParcelMgr::sendParcelAccessListUpdate(U32 which)  	}  } -class LLParcelMediaURLFilterResponder : public LLHTTPClient::Responder -{ -	virtual void result(const LLSD& content) -	{ -		LLViewerParcelMgr::getInstance()->receiveParcelMediaURLFilter(content); -	} -}; - -void LLViewerParcelMgr::requestParcelMediaURLFilter() -{ -	if (!mSelected) -	{ -		return; -	} - -	LLViewerRegion* region = LLWorld::getInstance()->getRegionFromPosGlobal( mWestSouth ); -	if (!region) -	{ -		return; -	} - -	LLParcel* parcel = mCurrentParcel; -	if (!parcel) -	{ -		llwarns << "no parcel" << llendl; -		return; -	} - -	LLSD body; -	body["local-id"] = parcel->getLocalID(); -	body["list"] = parcel->getMediaURLFilterList(); - -	std::string url = region->getCapability("ParcelMediaURLFilterList"); -	if (!url.empty()) -	{ -		LLHTTPClient::post(url, body, new LLParcelMediaURLFilterResponder); -	} -	else -	{ -		llwarns << "can't get ParcelMediaURLFilterList cap" << llendl; -	} -} - - -void LLViewerParcelMgr::receiveParcelMediaURLFilter(const LLSD &content) -{ -	if (content.has("list")) -	{ -		LLParcel* parcel = LLViewerParcelMgr::getInstance()->mCurrentParcel; -		if (!parcel) return; -		 -		if (content["local-id"].asInteger() == parcel->getLocalID()) -		{ -			parcel->setMediaURLFilterList(content["list"]); -			 -			LLViewerParcelMgr::getInstance()->notifyObservers(); -		} -	} -} - -  void LLViewerParcelMgr::deedLandToGroup()  {  	std::string group_name; diff --git a/indra/newview/llviewerparcelmgr.h b/indra/newview/llviewerparcelmgr.h index 2a11549426..6183b7e90e 100644 --- a/indra/newview/llviewerparcelmgr.h +++ b/indra/newview/llviewerparcelmgr.h @@ -223,11 +223,6 @@ public:  	// Takes an Access List flag, like AL_ACCESS or AL_BAN  	void	sendParcelAccessListRequest(U32 flags); -	// asks for the parcel's media url filter list -	void    requestParcelMediaURLFilter(); -	// receive the response -	void    receiveParcelMediaURLFilter(const LLSD &content); -	  	// Dwell is not part of the usual parcel update information because the  	// simulator doesn't actually know the per-parcel dwell.  Ack!  We have  	// to get it out of the database. diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 9ff00a1b82..58e4b804fd 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1567,7 +1567,6 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)  	capabilityNames.append("NewFileAgentInventory");  	capabilityNames.append("ObjectNavMeshProperties");  	capabilityNames.append("ParcelPropertiesUpdate"); -	capabilityNames.append("ParcelMediaURLFilterList");  	capabilityNames.append("ParcelNavigateMedia");  	capabilityNames.append("ParcelVoiceInfoRequest");  	capabilityNames.append("ProductInfoRequest"); diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 0b98119b19..e874373f9e 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -1694,6 +1694,21 @@ void LLPipeline::unlinkDrawable(LLDrawable *drawable)  } +//static +void LLPipeline::removeMutedAVsLights(LLVOAvatar* muted_avatar) +{ +	LLFastTimer t(FTM_REMOVE_FROM_LIGHT_SET); +	for (light_set_t::iterator iter = gPipeline.mNearbyLights.begin(); +		 iter != gPipeline.mNearbyLights.end(); iter++) +	{ +		if (iter->drawable->getVObj()->isAttachment() && iter->drawable->getVObj()->getAvatar() == muted_avatar) +		{ +			gPipeline.mLights.erase(iter->drawable); +			gPipeline.mNearbyLights.erase(iter); +		} +	} +} +  U32 LLPipeline::addObject(LLViewerObject *vobj)  {  	LLMemType mt_ao(LLMemType::MTYPE_PIPELINE_ADD_OBJECT); diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index 68ae1e7050..fe36c7cf4f 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -151,6 +151,8 @@ public:  	void		 unlinkDrawable(LLDrawable*); +	static void removeMutedAVsLights(LLVOAvatar*); +  	// Object related methods  	void        markVisible(LLDrawable *drawablep, LLCamera& camera);  	void		markOccluder(LLSpatialGroup* group); diff --git a/indra/newview/res-sdl/lltoolpathfinding.BMP b/indra/newview/res-sdl/lltoolpathfinding.BMPBinary files differ new file mode 100644 index 0000000000..a567951b7a --- /dev/null +++ b/indra/newview/res-sdl/lltoolpathfinding.BMP diff --git a/indra/newview/res-sdl/lltoolpathfindingpathend.BMP b/indra/newview/res-sdl/lltoolpathfindingpathend.BMPBinary files differ new file mode 100644 index 0000000000..aacea8237f --- /dev/null +++ b/indra/newview/res-sdl/lltoolpathfindingpathend.BMP diff --git a/indra/newview/res-sdl/lltoolpathfindingpathendadd.BMP b/indra/newview/res-sdl/lltoolpathfindingpathendadd.BMPBinary files differ new file mode 100644 index 0000000000..fa19f3f105 --- /dev/null +++ b/indra/newview/res-sdl/lltoolpathfindingpathendadd.BMP diff --git a/indra/newview/res-sdl/lltoolpathfindingpathstart.BMP b/indra/newview/res-sdl/lltoolpathfindingpathstart.BMPBinary files differ new file mode 100644 index 0000000000..912b7f931a --- /dev/null +++ b/indra/newview/res-sdl/lltoolpathfindingpathstart.BMP diff --git a/indra/newview/res-sdl/lltoolpathfindingpathstartadd.BMP b/indra/newview/res-sdl/lltoolpathfindingpathstartadd.BMPBinary files differ new file mode 100644 index 0000000000..4e8999ae0b --- /dev/null +++ b/indra/newview/res-sdl/lltoolpathfindingpathstartadd.BMP diff --git a/indra/newview/skins/default/xui/de/panel_volume_pulldown.xml b/indra/newview/skins/default/xui/de/panel_volume_pulldown.xml new file mode 100644 index 0000000000..e6ab9165d7 --- /dev/null +++ b/indra/newview/skins/default/xui/de/panel_volume_pulldown.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<panel name="volumepulldown_floater" width="240"> +	<button left="217" name="prefs_btn"/> +	<slider label="Master" name="System Volume" label_width="80" width="180"/> +    <slider label="Schaltflächen" label_width="80" width="180" name="UI Volume"/> +    <slider label="Umgebung" label_width="80" width="180" name="Wind Volume"/> +    <slider label="Soundeffekte" label_width="80" width="180" name="SFX Volume"/> +	<check_box name="gesture_audio_play_btn" tool_tip="Sounds von Gesten abspielen"/> +    <slider label="Musikstream" label_width="80" width="180" name="Music Volume"/> +	<check_box tool_tip="Musikstream aktivieren" name="enable_music"/> +    <slider label="Medien" label_width="80" width="180" name="Media Volume"/> +	<check_box tool_tip="Medienstream aktivieren" name="enable_media"/> +    <slider label="Voice-Chat" label_width="80" width="180" name="Voice Volume"/> +	<check_box tool_tip="Voice-Chat aktivieren" name="enable_voice_check"/> +</panel> diff --git a/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml b/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml index eaed92ac55..9bc5c7d5a4 100644 --- a/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml +++ b/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml @@ -4,9 +4,9 @@      can_resize="true"      can_tear_off="false"      height="395" -    width="1015" +    width="1075"      min_height="395" -    min_width="1015" +    min_width="1075"      layout="topleft"      name="floater_pathfinding_linksets"      help_topic="floater_pathfinding_linksets" @@ -25,11 +25,15 @@    <floater.string name="linkset_terrain_name">[Terrain]</floater.string>    <floater.string name="linkset_terrain_description">--</floater.string>    <floater.string name="linkset_terrain_owner">--</floater.string> +  <floater.string name="linkset_terrain_scripted">--</floater.string>    <floater.string name="linkset_terrain_land_impact">--</floater.string>    <floater.string name="linkset_terrain_dist_from_you">--</floater.string>    <floater.string name="linkset_owner_loading">[Loading]</floater.string>    <floater.string name="linkset_owner_unknown">[Unknown]</floater.string>    <floater.string name="linkset_owner_group">[group]</floater.string> +  <floater.string name="linkset_is_scripted">Yes</floater.string> +  <floater.string name="linkset_is_not_scripted">No</floater.string> +  <floater.string name="linkset_is_unknown_scripted">Unknown</floater.string>    <floater.string name="linkset_use_walkable">Walkable</floater.string>    <floater.string name="linkset_use_static_obstacle">Static obstacle</floater.string>    <floater.string name="linkset_use_dynamic_obstacle">Movable obstacle</floater.string> @@ -47,7 +51,7 @@        follows="left|top|right|bottom"        layout="topleft"        height="226" -      width="999"> +      width="1059">      <text          height="13"          word_wrap="false" @@ -155,7 +159,7 @@          layout="topleft"          name="apply_filters"          top_pad="-21" -        left_pad="31" +        left_pad="91"          width="73"/>      <button          follows="right|top" @@ -177,7 +181,7 @@          tab_stop="false"          multi_select="true"          name="objects_scroll_list" -        width="980"> +        width="1040">        <scroll_list.columns            label="Name (root prim)"            name="name" @@ -191,6 +195,10 @@            name="owner"            width="141" />        <scroll_list.columns +          label="Scripted" +          name="scripted" +          width="60" /> +      <scroll_list.columns            label="Impact"            name="land_impact"            width="55" /> @@ -230,7 +238,7 @@          layout="topleft"          name="messaging_status"          top_pad="17" -        width="619"> +        width="679">        Linksets:      </text>      <button @@ -269,7 +277,7 @@        name="horiz_separator"        top_pad="0"        left="18" -      width="979"/> +      width="1039"/>    <panel        border="false"        bevel_style="none" @@ -277,7 +285,7 @@        layout="topleft"        left="0"        height="67" -      width="950"> +      width="1010">      <text          height="13"          word_wrap="false" @@ -327,7 +335,7 @@          layout="topleft"          name="teleport_me_to_object"          top_pad="-21" -        left_pad="206" +        left_pad="239"          width="160"/>      <button          follows="right|bottom" @@ -336,7 +344,7 @@          layout="topleft"          name="return_objects"          top_pad="-21" -        left_pad="220" +        left_pad="252"          width="95"/>      <button          follows="right|bottom" @@ -356,7 +364,7 @@        name="horiz_separator"        top_pad="0"        left="18" -      width="979"/> +      width="1039"/>    <panel        border="false"        bevel_style="none" @@ -364,7 +372,7 @@        layout="topleft"        left="0"        height="75" -      width="950"> +      width="1010">      <text          height="13"          word_wrap="false" @@ -376,7 +384,7 @@          layout="topleft"          left="18"          top_pad="8" -        width="912"> +        width="972">        Edit attributes of selected linksets and press the button to apply changes      </text>      <combo_box diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml index b13bf5b508..13dc0b941a 100644 --- a/indra/newview/skins/default/xui/en/menu_inventory.xml +++ b/indra/newview/skins/default/xui/en/menu_inventory.xml @@ -537,6 +537,14 @@       layout="topleft"       name="Landmark Separator" />      <menu_item_call +    label="Copy SLurl" +    layout="topleft" +    name="url_copy"> +       <menu_item_call.on_click +        function="Inventory.DoToSelected" +        parameter="copy_slurl" /> +   </menu_item_call>  +   <menu_item_call       label="About Landmark"       layout="topleft"       name="About Landmark"> diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index c0c04da2d0..f0a126724b 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -8073,9 +8073,26 @@ The site at '<nolink>[HOST_NAME]</nolink>' in realm '    <notification     icon="alertmodal.tga" -   name="PathfindingLinksets_SetLinksetUseMismatchOnRestricted" +   name="PathfindingLinksets_WarnOnPhantom"     type="alertmodal"> -    Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset.  These linksets will be set to be '[RESTRICTED_TYPE]' instead. +Some selected linksets will have the Phantom flag toggled. + +Do you wish to continue? +    <tag>confirm</tag> +    <usetemplate +     ignoretext="Some selected linksets phantom flag will be toggled." +     name="okcancelignore" +     notext="Cancel" +     yestext="OK"/> +  </notification> + +  <notification +   icon="alertmodal.tga" +   name="PathfindingLinksets_MismatchOnRestricted" +   type="alertmodal"> +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset.  These linksets will be set to be '[RESTRICTED_TYPE]' instead. + +Do you wish to continue?      <tag>confirm</tag>      <usetemplate       ignoretext="Some selected linksets cannot be set because of permission restrictions on the linkset." @@ -8086,9 +8103,11 @@ The site at '<nolink>[HOST_NAME]</nolink>' in realm '    <notification     icon="alertmodal.tga" -   name="PathfindingLinksets_SetLinksetUseMismatchOnVolume" +   name="PathfindingLinksets_MismatchOnVolume"     type="alertmodal"> -    Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. + +Do you wish to continue?      <tag>confirm</tag>      <usetemplate       ignoretext="Some selected linksets cannot be set because the shape is non-convex" @@ -8099,10 +8118,47 @@ The site at '<nolink>[HOST_NAME]</nolink>' in realm '    <notification     icon="alertmodal.tga" -   name="PathfindingLinksets_SetLinksetUseMismatchOnRestrictedAndVolume" +   name="PathfindingLinksets_WarnOnPhantom_MismatchOnRestricted" +   type="alertmodal"> +Some selected linksets will have the Phantom flag toggled. + +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset.  These linksets will be set to be '[RESTRICTED_TYPE]' instead. + +Do you wish to continue? +    <tag>confirm</tag> +    <usetemplate +     ignoretext="Some selected linksets phantom flag will be toggled and others cannot be set because of permission restrictions on the linkset." +     name="okcancelignore" +     notext="Cancel" +     yestext="OK"/> +  </notification> + +  <notification +   icon="alertmodal.tga" +   name="PathfindingLinksets_WarnOnPhantom_MismatchOnVolume" +   type="alertmodal"> +Some selected linksets will have the Phantom flag toggled. + +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. + +Do you wish to continue? +    <tag>confirm</tag> +    <usetemplate +     ignoretext="Some selected linksets phantom flag will be toggled and others cannot be set because the shape is non-convex" +     name="okcancelignore" +     notext="Cancel" +     yestext="OK"/> +  </notification> + +  <notification +   icon="alertmodal.tga" +   name="PathfindingLinksets_MismatchOnRestricted_MismatchOnVolume"     type="alertmodal"> -    Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset.  These linksets will be set to be '[RESTRICTED_TYPE]' instead. - Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. These linksets' use types will not change. +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset.  These linksets will be set to be '[RESTRICTED_TYPE]' instead. + +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. These linksets' use types will not change. + +Do you wish to continue?      <tag>confirm</tag>      <usetemplate       ignoretext="Some selected linksets cannot be set because of permission restrictions on the linkset and because the shape is non-convex." @@ -8113,6 +8169,25 @@ The site at '<nolink>[HOST_NAME]</nolink>' in realm '    <notification     icon="alertmodal.tga" +   name="PathfindingLinksets_WarnOnPhantom_MismatchOnRestricted_MismatchOnVolume" +   type="alertmodal"> +Some selected linksets will have the Phantom flag toggled. + +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset.  These linksets will be set to be '[RESTRICTED_TYPE]' instead. + +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. These linksets' use types will not change. + +Do you wish to continue? +    <tag>confirm</tag> +    <usetemplate +     ignoretext="Some selected linksets phantom flag will be toggled and others cannot be set because of permission restrictions on the linkset and because the shape is non-convex." +     name="okcancelignore" +     notext="Cancel" +     yestext="OK"/> +  </notification> + +  <notification +   icon="alertmodal.tga"     name="PathfindingLinksets_ChangeToFlexiblePath"     type="alertmodal">      The selected object affects the navmesh.  Changing it to a Flexible Path will remove it from the navmesh. diff --git a/indra/newview/skins/default/xui/en/panel_region_debug.xml b/indra/newview/skins/default/xui/en/panel_region_debug.xml index a4883c21e2..81b2281adb 100644 --- a/indra/newview/skins/default/xui/en/panel_region_debug.xml +++ b/indra/newview/skins/default/xui/en/panel_region_debug.xml @@ -198,7 +198,7 @@       layout="topleft"       left_pad="155"       name="cancel_restart_btn" -     tool_tip="Delay region restart by one hour" +     tool_tip="Cancel region restart"       top_delta="0"       width="150" />  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml index 3aa34439f1..dd2a0c6627 100644 --- a/indra/newview/skins/default/xui/en/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml @@ -129,6 +129,5 @@       left_pad="5"       top="2"       name="volume_btn" -     tool_tip="Global Volume Control"       width="16" />  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_volume_pulldown.xml b/indra/newview/skins/default/xui/en/panel_volume_pulldown.xml index 7b22b2cce1..6adede0362 100644 --- a/indra/newview/skins/default/xui/en/panel_volume_pulldown.xml +++ b/indra/newview/skins/default/xui/en/panel_volume_pulldown.xml @@ -8,41 +8,289 @@   border="false"   chrome="true"   follows="bottom" - height="150" + height="155"   layout="topleft"   name="volumepulldown_floater" - width="32"> - <slider -  control_name="AudioLevelMaster" -  follows="left|top" -  left="0" -  top="1" -  orientation="vertical" -  height="120" -  increment="0.05" -  initial_value="0.5" -  layout="topleft" -  name="mastervolume" -  show_text="false" -  slider_label.halign="right" -  top_pad="2" -  volume="true"> -  <slider.commit_callback -   function="Vol.setControlFalse" -   parameter="MuteAudio" /> -  </slider> -  <button -    left="10" -    top_pad="9" -    width="12" -    height="12" -    follows="top|left" -    name="prefs_btn" -    image_unselected="Icon_Gear_Foreground" -    image_disabled="Icon_Gear_Background" -    image_pressed="Icon_Gear_Press" -    scale_image="false"> -    <button.commit_callback -       function="Vol.GoAudioPrefs" /> -  </button> + width="225"> +      <slider +     control_name="AudioLevelMaster" +     follows="top|left" +     font.style="BOLD" +     height="15" +     increment="0.025" +     initial_value="0.5" +     label="Master" +     label_width="60" +     left="10" +     width="160" +     layout="topleft" +     name="System Volume" +     show_text="false" +     top="10" +     volume="true"> +        <slider.commit_callback +         function="Pref.setControlFalse" +         parameter="MuteAudio" /> +    </slider> +    <button +     control_name="MuteAudio" +     follows="top|left" +     height="16" +     image_selected="AudioMute_Off" +     image_unselected="Audio_Off" +     is_toggle="true" +     layout="topleft" +     left_pad="5" +     name="mute_audio" +     tab_stop="false" +     width="16" /> +    <slider +        control_name="AudioLevelUI" +        disabled_control="MuteAudio" +        follows="left|top" +        height="15" +        increment="0.025" +        initial_value="0.5" +        label="Buttons" +        label_width="60" +        left="10" +        width="160" +        layout="topleft" +        name="UI Volume" +        show_text="false" +        top_pad="4" +        volume="true"> +    <slider.commit_callback +        function="Pref.setControlFalse" +        parameter="MuteUI" /> +    </slider> +    <button +        control_name="MuteUI" +        disabled_control="MuteAudio" +        follows="top|left" +        height="16" +        image_selected="AudioMute_Off" +        image_unselected="Audio_Off" +        is_toggle="true" +        layout="topleft" +        left_pad="5" +        name="mute_audio" +        tab_stop="false" +        width="16" /> +    <slider +     control_name="AudioLevelAmbient" +     disabled_control="MuteAudio" +     follows="left|top" +     height="15" +     increment="0.025" +     initial_value="0.5" +     label="Ambient" +     label_width="60" +     left="10" +     width="160" +     layout="topleft" +     name="Wind Volume" +     show_text="false" +     top_pad="4" +     volume="true"> +        <slider.commit_callback +         function="Pref.setControlFalse" +         parameter="MuteAmbient" /> +    </slider> +    <button +     control_name="MuteAmbient" +     disabled_control="MuteAudio" +     follows="top|left" +     height="16" +     image_selected="AudioMute_Off" +     image_unselected="Audio_Off" +     is_toggle="true" +     layout="topleft" +     left_pad="5" +     name="mute_audio" +     tab_stop="false" +     width="16" /> +    <slider +     control_name="AudioLevelSFX" +     disabled_control="MuteAudio" +     follows="left|top" +     height="15" +     increment="0.025" +     initial_value="0.5" +     label="Sounds" +     label_width="60" +     left="10" +     width="160" +     layout="topleft" +     name="SFX Volume" +     show_text="false" +     top_pad="4" +     volume="true"> +        <slider.commit_callback +         function="Pref.setControlFalse" +         parameter="MuteSounds" /> +    </slider> +    <button +     control_name="MuteSounds" +     disabled_control="MuteAudio" +     follows="top|left" +     height="16" +     image_selected="AudioMute_Off" +     image_unselected="Audio_Off" +     is_toggle="true" +     layout="topleft" +     left_pad="5" +     name="mute_audio" +     tab_stop="false" +     width="16"> +      <button.commit_callback +      function="Pref.SetSounds"/> +    </button> +  <check_box +    name="gesture_audio_play_btn" +		control_name="EnableGestureSounds" +    disabled_control="MuteAudio" +    height="16" +    layout="topleft" +    left_pad="5" +    tool_tip="Enable sounds from gestures" +    top_delta="2" +    width="350"/> +    <slider +     control_name="AudioLevelMusic" +     disabled_control="MuteAudio" +     follows="left|top" +     height="15" +     increment="0.025" +     initial_value="0.5" +     label="Music" +     label_width="60" +     left="10" +     width="160" +     layout="topleft" +     name="Music Volume" +     show_text="false" +     top_pad="4" +     volume="true"> +        <slider.commit_callback +         function="Pref.setControlFalse" +         parameter="MuteMusic" /> +    </slider> +    <button +     control_name="MuteMusic" +     disabled_control="MuteAudio" +     follows="top|left" +     height="16" +     image_selected="AudioMute_Off" +     image_unselected="Audio_Off" +     is_toggle="true" +     layout="topleft" +     left_pad="5" +     name="mute_audio" +     tab_stop="false" +     width="16" /> +    <check_box +        control_name="AudioStreamingMusic" +        height="16" +        tool_tip="Enable Streaming Music" +        layout="topleft" +        left_pad="5" +        name="enable_music" +        top_delta="2" +        width="350"> +        <check_box.commit_callback +            function="Pref.updateMediaAutoPlayCheckbox"/> +    </check_box> +    <slider +        control_name="AudioLevelMedia" +        disabled_control="MuteAudio" +        follows="left|top" +        height="16" +        increment="0.025" +        initial_value="0.5" +        label="Media" +        label_width="60" +        left="10" +        width="160" +        layout="topleft" +        name="Media Volume" +        show_text="false" +        top_pad="4" +        volume="true"> +      <slider.commit_callback +        function="Pref.setControlFalse" +        parameter="MuteMedia" /> +    </slider> +    <button +        control_name="MuteMedia" +        disabled_control="MuteAudio" +        follows="top|left" +        height="16" +        image_selected="AudioMute_Off" +        image_unselected="Audio_Off" +        is_toggle="true" +        layout="topleft" +        left_pad="5" +        name="mute_audio" +        tab_stop="false" +        width="16" /> +    <check_box +        label_text.halign="left" +        follows="left|top" +        height="16" +        control_name ="AudioStreamingMedia" +        tool_tip="Enable Streaming Media" +        layout="topleft" +        top_delta="2" +        left_pad="5" +        name="enable_media" +        width="110"> +        <check_box.commit_callback +            function="Pref.updateMediaAutoPlayCheckbox"/> +    </check_box> +    <slider +        control_name="AudioLevelVoice" +        disabled_control="MuteAudio" +        follows="left|top" +        height="16" +        increment="0.025" +        initial_value="0.5" +        label="Voice" +        label_width="60" +        left="10" +        width="160" +        layout="topleft" +        top_pad="4" +        name="Voice Volume" +        show_text="false" +        volume="true"> +    <slider.commit_callback +        function="Pref.setControlFalse" +        parameter="MuteVoice" /> +    </slider> +    <button +        control_name="MuteVoice" +        disabled_control="MuteAudio" +        follows="top|left" +        height="16" +        image_selected="AudioMute_Off" +        image_unselected="Audio_Off" +        is_toggle="true" +        layout="topleft" +        left_pad="5" +        name="mute_audio" +        tab_stop="false" +        width="16" /> +    <check_box +        label_text.halign="left" +        follows="left|top" +        height="16" +        control_name ="EnableVoiceChat" +        disabled_control="CmdLineDisableVoice" +        tool_tip="Enable Voice Chat" +        layout="topleft" +        top_delta="2" +        left_pad="5" +        name="enable_voice_check" +        width="110"/>  </panel> diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index d5186e4c1b..15eb46c348 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -2272,11 +2272,15 @@ Drag folders to this area and click "Send to Marketplace" to list them for sale    <!-- historically default name of the Favorites folder can start from either "f" or "F" letter.    We should localize both of them with the same value -->  	<string name="InvFolder favorite">My Favorites</string> +	<string name="InvFolder Favorites">My Favorites</string> +	<string name="InvFolder favorites">My Favorites</string>  	<string name="InvFolder Current Outfit">Current Outfit</string>  	<string name="InvFolder Initial Outfits">Initial Outfits</string>  	<string name="InvFolder My Outfits">My Outfits</string>  	<string name="InvFolder Accessories">Accessories</string>  	<string name="InvFolder Meshes">Meshes</string> +	<string name="InvFolder Received Items">Received Items</string> +	<string name="InvFolder Merchant Outbox">Merchant Outbox</string>    <!-- are used for Friends and Friends/All folders in Inventory "Calling cards" folder. See EXT-694-->  	<string name="InvFolder Friends">Friends</string> diff --git a/indra/newview/skins/default/xui/es/panel_volume_pulldown.xml b/indra/newview/skins/default/xui/es/panel_volume_pulldown.xml new file mode 100644 index 0000000000..9193da6cde --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_volume_pulldown.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<panel name="volumepulldown_floater" width="215"> +	<slider label="Maestro" name="System Volume" label_width="55" width="155"/> +	<slider label="Botones" name="UI Volume" label_width="55" width="155"/> +	<slider label="Ambiente" name="Wind Volume" label_width="55" width="155"/> +	<slider label="Sonidos" name="SFX Volume" label_width="55" width="155"/> +	<check_box name="gesture_audio_play_btn" tool_tip="Activa el sonido de los gestos"/> +	<slider label="Música" name="Music Volume" label_width="55" width="155"/> +	<check_box tool_tip="Activa el flujo de audio" name="enable_music"/> +	<slider label="Medios" name="Media Volume" label_width="55" width="155"/> +	<check_box tool_tip="Activa el flujo de medios" name="enable_media"/> +	<slider label="Voz" name="Voice Volume" label_width="55" width="155"/> +	<check_box tool_tip="Activar chat de voz" name="enable_voice_check"/> +</panel> diff --git a/indra/newview/skins/default/xui/it/panel_volume_pulldown.xml b/indra/newview/skins/default/xui/it/panel_volume_pulldown.xml new file mode 100644 index 0000000000..1792b09413 --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_volume_pulldown.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<panel name="volumepulldown_floater" width="220"> +    <button left="197" name="prefs_btn"/> +    <slider label="Generale" name="System Volume" label_width="60" width="160"/> +    <slider label="Interfaccia" name="UI Volume" label_width="60" width="160"/> +    <slider label="Ambiente" name="Wind Volume" label_width="60" width="160"/> +    <slider label="Suoni" name="SFX Volume" label_width="60" width="160"/> +    <check_box name="gesture_audio_play_btn" tool_tip="Attiva suoni Gesture"/> +    <slider label="Musica" name="Music Volume" label_width="60" width="160"/> +    <check_box tool_tip="Abilita musica in streaming" name="enable_music"/> +    <slider label="Media" name="Media Volume" label_width="60" width="160"/> +    <check_box tool_tip="Abilita riproduzione media" name="enable_media"/> +    <slider label="Voice" name="Voice Volume" label_width="60" width="160"/> +    <check_box tool_tip="Abilita il voice" name="enable_voice_check"/> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_volume_pulldown.xml b/indra/newview/skins/default/xui/pl/panel_volume_pulldown.xml new file mode 100644 index 0000000000..1611900700 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_volume_pulldown.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<panel name="volumepulldown_floater"> +    <slider label="Główny" name="System Volume"/> +    <slider label="Przyciski" name="UI Volume"/> +    <slider label="Okolica" name="Wind Volume"/> +    <slider label="Efekty" name="SFX Volume"/> +    <check_box name="gesture_audio_play_btn" tool_tip="Włącz dźwięki gestów"/> +    <slider label="Muzyka" name="Music Volume"/> +    <check_box tool_tip="Włącz muzykę strumieniową" name="enable_music"/> +    <slider label="Media" name="Media Volume"/> +    <check_box tool_tip="Włącz media strumieniowe" name="enable_media"/> +    <slider label="Głos" name="Voice Volume"/> +    <check_box tool_tip="Włącz rozmowy głosowe" name="enable_voice_check"/> +</panel> | 
