diff options
24 files changed, 568 insertions, 184 deletions
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index f76b471c9c..c9b5631d54 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -4,13 +4,14 @@      <key>AFKTimeout</key>      <map>        <key>Comment</key> -      <string>Time before automatically setting AFK (away from keyboard) mode (seconds, 0=never)</string> +      <string>Time before automatically setting AFK (away from keyboard) mode (seconds, 0=never).  +        Valid values are: 0, 120, 300, 600, 1800</string>        <key>Persist</key>        <integer>1</integer>        <key>Type</key>        <string>S32</string>        <key>Value</key> -      <real>0</real> +      <real>300</real>      </map>      <key>AdvanceSnapshot</key>      <map> diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp index 407c5b6153..c7a5691d70 100644 --- a/indra/newview/llavatarlist.cpp +++ b/indra/newview/llavatarlist.cpp @@ -32,13 +32,18 @@  #include "llviewerprecompiledheaders.h" +// common +#include "lltrans.h" +  #include "llavatarlist.h"  #include "llagentdata.h" // for comparator  // newview +#include "llavatariconctrl.h"  #include "llcallingcard.h" // for LLAvatarTracker  #include "llcachename.h"  #include "llrecentpeople.h" +#include "lltextutil.h"  #include "lluuid.h"  #include "llvoiceclient.h"  #include "llviewercontrol.h"	// for gSavedSettings @@ -193,6 +198,18 @@ void LLAvatarList::setDirty(bool val /*= true*/, bool force_refresh /*= false*/)  	}  } +void LLAvatarList::addAvalineItem(const LLUUID& item_id, const LLUUID& session_id, const std::string& item_name) +{ +	LL_DEBUGS("Avaline") << "Adding avaline item into the list: " << item_name << "|" << item_id << ", session: " << session_id << LL_ENDL; +	LLAvalineListItem* item = new LLAvalineListItem; +	item->setAvatarId(item_id, session_id, true, false); +	item->setName(item_name); + +	addItem(item, item_id); +	mIDs.push_back(item_id); +	sort(); +} +  //////////////////////////////////////////////////////////////////////////  // PROTECTED SECTION  ////////////////////////////////////////////////////////////////////////// @@ -471,3 +488,61 @@ bool LLAvatarItemAgentOnTopComparator::doCompare(const LLAvatarListItem* avatar_  	}  	return LLAvatarItemNameComparator::doCompare(avatar_item1,avatar_item2);  } + +/************************************************************************/ +/*             class LLAvalineListItem                                  */ +/************************************************************************/ +LLAvalineListItem::LLAvalineListItem(bool hide_number/* = true*/) : LLAvatarListItem(false) +, mIsHideNumber(hide_number) +{ +	// should not use buildPanel from the base class to ensure LLAvalineListItem::postBuild is called. +	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_avatar_list_item.xml"); +} + +BOOL LLAvalineListItem::postBuild() +{ +	BOOL rv = LLAvatarListItem::postBuild(); + +	if (rv) +	{ +		setOnline(true); +		showLastInteractionTime(false); +		setShowProfileBtn(false); +		setShowInfoBtn(false); +		mAvatarIcon->setValue("Avaline_Icon"); +		mAvatarIcon->setToolTip(std::string("")); +	} +	return rv; +} + +// to work correctly this method should be called AFTER setAvatarId for avaline callers with hidden phone number +void LLAvalineListItem::setName(const std::string& name) +{ +	if (mIsHideNumber) +	{ +		static U32 order = 0; +		typedef std::map<LLUUID, U32> avaline_callers_nums_t; +		static avaline_callers_nums_t mAvalineCallersNums; + +		llassert(getAvatarId() != LLUUID::null); + +		const LLUUID &uuid = getAvatarId(); + +		if (mAvalineCallersNums.find(uuid) == mAvalineCallersNums.end()) +		{ +			mAvalineCallersNums[uuid] = ++order; +			LL_DEBUGS("Avaline") << "Set name for new avaline caller: " << uuid << ", order: " << order << LL_ENDL; +		} +		LLStringUtil::format_map_t args; +		args["[ORDER]"] = llformat("%u", mAvalineCallersNums[uuid]); +		std::string hidden_name = LLTrans::getString("AvalineCaller", args); + +		LL_DEBUGS("Avaline") << "Avaline caller: " << uuid << ", name: " << hidden_name << LL_ENDL; +		LLAvatarListItem::setName(hidden_name); +	} +	else +	{ +		const std::string& formatted_phone = LLTextUtil::formatPhoneNumber(name); +		LLAvatarListItem::setName(formatted_phone); +	} +} diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h index 0203617867..528f796b8b 100644 --- a/indra/newview/llavatarlist.h +++ b/indra/newview/llavatarlist.h @@ -96,6 +96,8 @@ public:  	virtual S32 notifyParent(const LLSD& info); +	void addAvalineItem(const LLUUID& item_id, const LLUUID& session_id, const std::string& item_name); +  protected:  	void refresh(); @@ -175,4 +177,27 @@ protected:  	virtual bool doCompare(const LLAvatarListItem* avatar_item1, const LLAvatarListItem* avatar_item2) const;  }; +/** + * Represents Avaline caller in Avatar list in Voice Control Panel and group chats. + */ +class LLAvalineListItem : public LLAvatarListItem +{ +public: + +	/** +	 * Constructor +	 * +	 * @param hide_number - flag indicating if number should be hidden. +	 *		In this case It will be shown as "Avaline Caller 1", "Avaline Caller 1", etc. +	 */ +	LLAvalineListItem(bool hide_number = true); + +	/*virtual*/ BOOL postBuild(); + +	/*virtual*/ void setName(const std::string& name); + +private: +	bool mIsHideNumber; +}; +  #endif // LL_LLAVATARLIST_H diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp index 44f88cce29..2a51eeacfc 100644 --- a/indra/newview/llavatarlistitem.cpp +++ b/indra/newview/llavatarlistitem.cpp @@ -212,21 +212,25 @@ void LLAvatarListItem::setState(EItemState item_style)  	mAvatarIcon->setColor(item_icon_color_map[item_style]);  } -void LLAvatarListItem::setAvatarId(const LLUUID& id, const LLUUID& session_id, bool ignore_status_changes) +void LLAvatarListItem::setAvatarId(const LLUUID& id, const LLUUID& session_id, bool ignore_status_changes/* = false*/, bool is_resident/* = true*/)  {  	if (mAvatarId.notNull())  		LLAvatarTracker::instance().removeParticularFriendObserver(mAvatarId, this);  	mAvatarId = id; -	mAvatarIcon->setValue(id);  	mSpeakingIndicator->setSpeakerId(id, session_id);  	// We'll be notified on avatar online status changes  	if (!ignore_status_changes && mAvatarId.notNull())  		LLAvatarTracker::instance().addParticularFriendObserver(mAvatarId, this); -	// Set avatar name. -	gCacheName->get(id, FALSE, boost::bind(&LLAvatarListItem::onNameCache, this, _2, _3)); +	if (is_resident) +	{ +		mAvatarIcon->setValue(id); + +		// Set avatar name. +		gCacheName->get(id, FALSE, boost::bind(&LLAvatarListItem::onNameCache, this, _2, _3)); +	}  }  void LLAvatarListItem::showLastInteractionTime(bool show) diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h index 2db6484a30..3ba2c7a3e3 100644 --- a/indra/newview/llavatarlistitem.h +++ b/indra/newview/llavatarlistitem.h @@ -100,7 +100,7 @@ public:  	void setName(const std::string& name);  	void setHighlight(const std::string& highlight);  	void setState(EItemState item_style); -	void setAvatarId(const LLUUID& id, const LLUUID& session_id, bool ignore_status_changes = false); +	void setAvatarId(const LLUUID& id, const LLUUID& session_id, bool ignore_status_changes = false, bool is_resident = true);  	void setLastInteractionTime(U32 secs_since);  	//Show/hide profile/info btn, translating speaker indicator and avatar name coordinates accordingly  	void setShowProfileBtn(bool show); diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp index 01a699506e..d1e99fbd61 100644 --- a/indra/newview/llfloateravatarpicker.cpp +++ b/indra/newview/llfloateravatarpicker.cpp @@ -451,8 +451,8 @@ void LLFloaterAvatarPicker::processAvatarPickerReply(LLMessageSystem* msg, void*  	LLFloaterAvatarPicker* floater = LLFloaterReg::findTypedInstance<LLFloaterAvatarPicker>("avatar_picker"); -	// these are not results from our last request -	if (query_id != floater->mQueryID) +	// floater is closed or these are not results from our last request +	if (NULL == floater || query_id != floater->mQueryID)  	{  		return;  	} diff --git a/indra/newview/llfloaterevent.cpp b/indra/newview/llfloaterevent.cpp index 97ebab3425..560cc29080 100644 --- a/indra/newview/llfloaterevent.cpp +++ b/indra/newview/llfloaterevent.cpp @@ -113,7 +113,6 @@ BOOL LLFloaterEvent::postBuild()  	mTBDuration = getChild<LLTextBox>("event_duration");  	mTBDesc = getChild<LLExpandableTextBox>("event_desc"); -	mTBDesc->setEnabled(FALSE);  	mTBRunBy = getChild<LLTextBox>("event_runby");  	mTBLocation = getChild<LLTextBox>("event_location"); diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp index 3ec8d11fb0..19dbc564d1 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -499,8 +499,8 @@ void LLIMFloater::setVisible(BOOL visible)  	{  		//only if floater was construced and initialized from xml  		updateMessages(); -		//prevent steal focus when IM opened in multitab mode -		if (!isChatMultiTab()) +		//prevent stealing focus when opening a background IM tab (EXT-5387, checking focus for EXT-6781) +		if (!isChatMultiTab() || hasFocus())  		{  			mInputEditor->setFocus(TRUE);  		} diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp index 0f22a50093..4ccf5e1c7b 100644 --- a/indra/newview/llmoveview.cpp +++ b/indra/newview/llmoveview.cpp @@ -200,7 +200,8 @@ void LLFloaterMove::setFlyingMode(BOOL fly)  	if (instance)  	{  		instance->setFlyingModeImpl(fly); -		instance->showModeButtons(!fly); +		BOOL is_sitting = isAgentAvatarValid() && gAgentAvatarp->isSitting(); +		instance->showModeButtons(!fly && !is_sitting);  	}  	if (fly)  	{ diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp index 026be882ed..53f92f7ad1 100644 --- a/indra/newview/llparticipantlist.cpp +++ b/indra/newview/llparticipantlist.cpp @@ -50,6 +50,145 @@  static const LLAvatarItemAgentOnTopComparator AGENT_ON_TOP_NAME_COMPARATOR; +// See EXT-4301. +/** + * class LLAvalineUpdater - observe the list of voice participants in session and check + *  presence of Avaline Callers among them. + * + * LLAvalineUpdater is a LLVoiceClientParticipantObserver. It provides two kinds of validation: + *	- whether Avaline caller presence among participants; + *	- whether watched Avaline caller still exists in voice channel. + * Both validations have callbacks which will notify subscriber if any of event occur. + * + * @see findAvalineCaller() + * @see checkIfAvalineCallersExist() + */ +class LLAvalineUpdater : public LLVoiceClientParticipantObserver +{ +public: +	typedef boost::function<void(const LLUUID& speaker_id)> process_avaline_callback_t; + +	LLAvalineUpdater(process_avaline_callback_t found_cb, process_avaline_callback_t removed_cb) +		: mAvalineFoundCallback(found_cb) +		, mAvalineRemovedCallback(removed_cb) +	{ +		LLVoiceClient::getInstance()->addObserver(this); +	} +	~LLAvalineUpdater() +	{ +		if (LLVoiceClient::instanceExists()) +		{ +			LLVoiceClient::getInstance()->removeObserver(this); +		} +	} + +	/** +	 * Adds UUID of Avaline caller to watch. +	 * +	 * @see checkIfAvalineCallersExist(). +	 */ +	void watchAvalineCaller(const LLUUID& avaline_caller_id) +	{ +		mAvalineCallers.insert(avaline_caller_id); +	} + +	void onChange() +	{ +		uuid_set_t participant_uuids; +		LLVoiceClient::getInstance()->getParticipantsUUIDSet(participant_uuids); + + +		// check whether Avaline caller exists among voice participants +		// and notify Participant List +		findAvalineCaller(participant_uuids); + +		// check whether watched Avaline callers still present among voice participant +		// and remove if absents. +		checkIfAvalineCallersExist(participant_uuids); +	} + +private: +	typedef std::set<LLUUID> uuid_set_t; + +	/** +	 * Finds Avaline callers among voice participants and calls mAvalineFoundCallback. +	 * +	 * When Avatar is in group call with Avaline caller and then ends call Avaline caller stays +	 * in Group Chat floater (exists in LLSpeakerMgr). If Avatar starts call with that group again +	 * Avaline caller is added to voice channel AFTER Avatar is connected to group call. +	 * But Voice Control Panel (VCP) is filled from session LLSpeakerMgr and there is no information +	 * if a speaker is Avaline caller. +	 * +	 * In this case this speaker is created as avatar and will be recreated when it appears in +	 * Avatar's Voice session. +	 * +	 * @see LLParticipantList::onAvalineCallerFound() +	 */ +	void findAvalineCaller(const uuid_set_t& participant_uuids) +	{ +		uuid_set_t::const_iterator it = participant_uuids.begin(), it_end = participant_uuids.end(); + +		for(; it != it_end; ++it) +		{ +			const LLUUID& participant_id = *it; +			if (!LLVoiceClient::getInstance()->isParticipantAvatar(participant_id)) +			{ +				LL_DEBUGS("Avaline") << "Avaline caller found among voice participants: " << participant_id << LL_ENDL; + +				if (mAvalineFoundCallback) +				{ +					mAvalineFoundCallback(participant_id); +				} +			} +		} +	} + +	/** +	 * Finds Avaline callers which are not anymore among voice participants and calls mAvalineRemovedCallback. +	 * +	 * The problem is when Avaline caller ends a call it is removed from Voice Client session but +	 * still exists in LLSpeakerMgr. Server does not send such information. +	 * This method implements a HUCK to notify subscribers that watched Avaline callers by class +	 * are not anymore in the call. +	 * +	 * @see LLParticipantList::onAvalineCallerRemoved() +	 */ +	void checkIfAvalineCallersExist(const uuid_set_t& participant_uuids) +	{ +		uuid_set_t::iterator it = mAvalineCallers.begin(); +		uuid_set_t::const_iterator participants_it_end = participant_uuids.end(); + +		while (it != mAvalineCallers.end()) +		{ +			const LLUUID participant_id = *it; +			LL_DEBUGS("Avaline") << "Check avaline caller: " << participant_id << LL_ENDL; +			bool not_found = participant_uuids.find(participant_id) == participants_it_end; +			if (not_found) +			{ +				LL_DEBUGS("Avaline") << "Watched Avaline caller is not found among voice participants: " << participant_id << LL_ENDL; + +				// notify Participant List +				if (mAvalineRemovedCallback) +				{ +					mAvalineRemovedCallback(participant_id); +				} + +				// remove from the watch list +				mAvalineCallers.erase(it++); +			} +			else +			{ +				++it; +			} +		} +	} + +	process_avaline_callback_t mAvalineFoundCallback; +	process_avaline_callback_t mAvalineRemovedCallback; + +	uuid_set_t mAvalineCallers; +}; +  LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* avatar_list,  bool use_context_menu/* = true*/,  		bool exclude_agent /*= true*/, bool can_toggle_icons /*= true*/):  	mSpeakerMgr(data_source), @@ -59,6 +198,9 @@ LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* av  ,	mExcludeAgent(exclude_agent)  ,	mValidateSpeakerCallback(NULL)  { +	mAvalineUpdater = new LLAvalineUpdater(boost::bind(&LLParticipantList::onAvalineCallerFound, this, _1), +		boost::bind(&LLParticipantList::onAvalineCallerRemoved, this, _1)); +  	mSpeakerAddListener = new SpeakerAddListener(*this);  	mSpeakerRemoveListener = new SpeakerRemoveListener(*this);  	mSpeakerClearListener = new SpeakerClearListener(*this); @@ -137,6 +279,9 @@ LLParticipantList::~LLParticipantList()  	}  	mAvatarList->setContextMenu(NULL); +	mAvatarList->setComparator(NULL); + +	delete mAvalineUpdater;  }  void LLParticipantList::setSpeakingIndicatorsVisible(BOOL visible) @@ -210,6 +355,55 @@ void LLParticipantList::onAvatarListRefreshed(LLUICtrl* ctrl, const LLSD& param)  	}  } +/* +Seems this method is not necessary after onAvalineCallerRemoved was implemented; + +It does nothing because list item is always created with correct class type for Avaline caller. +For now Avaline Caller is removed from the LLSpeakerMgr List when it is removed from the Voice Client +session. +This happens in two cases: if Avaline Caller ends call itself or if Resident ends group call. + +Probably Avaline caller should be removed from the LLSpeakerMgr list ONLY if it ends call itself. +Asked in EXT-4301. +*/ +void LLParticipantList::onAvalineCallerFound(const LLUUID& participant_id) +{ +	LLPanel* item = mAvatarList->getItemByValue(participant_id); + +	if (NULL == item) +	{ +		LL_WARNS("Avaline") << "Something wrong. Unable to find item for: " << participant_id << LL_ENDL; +		return; +	} + +	if (typeid(*item) == typeid(LLAvalineListItem)) +	{ +		LL_DEBUGS("Avaline") << "Avaline caller has already correct class type for: " << participant_id << LL_ENDL; +		// item representing an Avaline caller has a correct type already. +		return; +	} + +	LL_DEBUGS("Avaline") << "remove item from the list and re-add it: " << participant_id << LL_ENDL; + +	// remove UUID from LLAvatarList::mIDs to be able add it again. +	uuid_vec_t& ids = mAvatarList->getIDs(); +	uuid_vec_t::iterator pos = std::find(ids.begin(), ids.end(), participant_id); +	ids.erase(pos); + +	// remove item directly +	mAvatarList->removeItem(item); + +	// re-add avaline caller with a correct class instance. +	addAvatarIDExceptAgent(participant_id); +} + +void LLParticipantList::onAvalineCallerRemoved(const LLUUID& participant_id) +{ +	LL_DEBUGS("Avaline") << "Removing avaline caller from the list: " << participant_id << LL_ENDL; + +	mSpeakerMgr->removeAvalineSpeaker(participant_id); +} +  void LLParticipantList::setSortOrder(EParticipantSortOrder order)  {  	if ( mSortOrder != order ) @@ -355,8 +549,20 @@ void LLParticipantList::addAvatarIDExceptAgent(const LLUUID& avatar_id)  	if (mExcludeAgent && gAgent.getID() == avatar_id) return;  	if (mAvatarList->contains(avatar_id)) return; -	mAvatarList->getIDs().push_back(avatar_id); -	mAvatarList->setDirty(); +	bool is_avatar = LLVoiceClient::getInstance()->isParticipantAvatar(avatar_id); + +	if (is_avatar) +	{ +		mAvatarList->getIDs().push_back(avatar_id); +		mAvatarList->setDirty(); +	} +	else +	{ +		LLVoiceClient::participantState *participant = LLVoiceClient::getInstance()->findParticipantByID(avatar_id); + +		mAvatarList->addAvalineItem(avatar_id, mSpeakerMgr->getSessionID(), participant ? participant->mAccountName : LLTrans::getString("AvatarNameWaiting")); +		mAvalineUpdater->watchAvalineCaller(avatar_id); +	}  	adjustParticipant(avatar_id);  } diff --git a/indra/newview/llparticipantlist.h b/indra/newview/llparticipantlist.h index 953dff4551..9e5a2cbc1f 100644 --- a/indra/newview/llparticipantlist.h +++ b/indra/newview/llparticipantlist.h @@ -38,6 +38,7 @@  class LLSpeakerMgr;  class LLAvatarList;  class LLUICtrl; +class LLAvalineUpdater;  class LLParticipantList  { @@ -235,6 +236,9 @@ class LLParticipantList  		void onAvatarListDoubleClicked(LLUICtrl* ctrl);  		void onAvatarListRefreshed(LLUICtrl* ctrl, const LLSD& param); +		void onAvalineCallerFound(const LLUUID& participant_id); +		void onAvalineCallerRemoved(const LLUUID& participant_id); +  		/**  		 * Adjusts passed participant to work properly.  		 * @@ -272,4 +276,5 @@ class LLParticipantList  		LLPointer<LLAvatarItemRecentSpeakerComparator> mSortByRecentSpeakers;  		validate_speaker_callback_t mValidateSpeakerCallback; +		LLAvalineUpdater* mAvalineUpdater;  }; diff --git a/indra/newview/llspeakers.h b/indra/newview/llspeakers.h index b924fb2f2c..2bb160b7ce 100644 --- a/indra/newview/llspeakers.h +++ b/indra/newview/llspeakers.h @@ -234,6 +234,14 @@ public:  	LLVoiceChannel* getVoiceChannel() { return mVoiceChannel; }  	const LLUUID getSessionID(); +	/** +	 * Removes avaline speaker. +	 * +	 * This is a HACK due to server does not send information that Avaline caller ends call. +	 * It can be removed when server is updated. See EXT-4301 for details +	 */ +	bool removeAvalineSpeaker(const LLUUID& speaker_id) { return removeSpeaker(speaker_id); } +  protected:  	virtual void updateSpeakerList();  	void setSpeakerNotInChannel(LLSpeaker* speackerp); diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 9542bebde5..f55edd76b0 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -32,6 +32,7 @@  #include "llviewerprecompiledheaders.h"  #include "llviewermessage.h" +#include "boost/lexical_cast.hpp"  #include "llanimationstates.h"  #include "llaudioengine.h"  @@ -1856,6 +1857,53 @@ protected:  	}  }; +static void parse_lure_bucket(const std::string& bucket, +							  U64& region_handle, +							  LLVector3& pos, +							  LLVector3& look_at, +							  U8& region_access) +{ +	// tokenize the bucket +	typedef boost::tokenizer<boost::char_separator<char> > tokenizer; +	boost::char_separator<char> sep("|", "", boost::keep_empty_tokens); +	tokenizer tokens(bucket, sep); +	tokenizer::iterator iter = tokens.begin(); + +	S32 gx = boost::lexical_cast<S32>((*(iter)).c_str()); +	S32 gy = boost::lexical_cast<S32>((*(++iter)).c_str()); +	S32 rx = boost::lexical_cast<S32>((*(++iter)).c_str()); +	S32 ry = boost::lexical_cast<S32>((*(++iter)).c_str()); +	S32 rz = boost::lexical_cast<S32>((*(++iter)).c_str()); +	S32 lx = boost::lexical_cast<S32>((*(++iter)).c_str()); +	S32 ly = boost::lexical_cast<S32>((*(++iter)).c_str()); +	S32 lz = boost::lexical_cast<S32>((*(++iter)).c_str()); + +	// Grab region access +	region_access = SIM_ACCESS_MIN; +	if (++iter != tokens.end()) +	{ +		std::string access_str((*iter).c_str()); +		LLStringUtil::trim(access_str); +		if ( access_str == "A" ) +		{ +			region_access = SIM_ACCESS_ADULT; +		} +		else if ( access_str == "M" ) +		{ +			region_access = SIM_ACCESS_MATURE; +		} +		else if ( access_str == "PG" ) +		{ +			region_access = SIM_ACCESS_PG; +		} +	} + +	pos.setVec((F32)rx, (F32)ry, (F32)rz); +	look_at.setVec((F32)lx, (F32)ly, (F32)lz); + +	region_handle = to_region_handle(gx, gy); +} +  void process_improved_im(LLMessageSystem *msg, void **user_data)  {  	if (gNoRender) @@ -2487,10 +2535,19 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)  			}  			else  			{ +				LLVector3 pos, look_at; +				U64 region_handle; +				U8 region_access; +				std::string region_info = ll_safe_string((char*)binary_bucket, binary_bucket_size); +				parse_lure_bucket(region_info, region_handle, pos, look_at, region_access); + +				std::string region_access_str = LLViewerRegion::accessToString(region_access); +  				LLSD args;  				// *TODO: Translate -> [FIRST] [LAST] (maybe)  				args["NAME_SLURL"] = LLSLURL::buildCommand("agent", from_id, "about");  				args["MESSAGE"] = message; +				args["MATURITY"] = region_access_str;  				LLSD payload;  				payload["from_id"] = from_id;  				payload["lure_id"] = session_id; diff --git a/indra/newview/skins/default/xui/en/floater_joystick.xml b/indra/newview/skins/default/xui/en/floater_joystick.xml index b8156a174d..6e1bb8fcd0 100644 --- a/indra/newview/skins/default/xui/en/floater_joystick.xml +++ b/indra/newview/skins/default/xui/en/floater_joystick.xml @@ -6,7 +6,7 @@   name="Joystick"   help_topic="joystick"   title="JOYSTICK CONFIGURATION" - width="550"> + width="569">      <floater.string       name="NoDevice">          no device detected @@ -148,7 +148,7 @@       halign="right"       height="10"       layout="topleft" -     left="12" +     left="37"       mouse_opaque="false"       name="Control Modes:"       top="110" @@ -161,7 +161,7 @@       halign="center"       label="Avatar"       layout="topleft" -     left="125" +     left="150"       name="JoystickAvatarEnabled"       width="60" />      <check_box @@ -170,7 +170,7 @@       halign="center"       label="Build"       layout="topleft" -     left="194" +     left="219"       name="JoystickBuildEnabled"       width="60" />      <check_box @@ -179,14 +179,14 @@       halign="center"       label="Flycam"       layout="topleft" -     left="262" +     left="289"       name="JoystickFlycamEnabled"       width="60" />      <stat_view       height="250"       label="Joystick Monitor"       layout="topleft" -     left="340" +     left="359"       name="axis_view"       show_label="true"       top="142" @@ -250,9 +250,9 @@       bottom="144"       halign="right"       layout="topleft" -     left="20" +     left="3"       name="XScale" -     width="94"> +     width="140">          X Scale      </text>      <spinner @@ -261,7 +261,7 @@       decimal_digits="2"       label_width="0"       layout="topleft" -     left="125" +     left="150"       max_val="50"       min_val="-50"       name="AvatarAxisScale1" @@ -272,7 +272,7 @@       decimal_digits="2"       label_width="0"       layout="topleft" -     left="195" +     left="220"       max_val="1024"       min_val="-1024"       name="BuildAxisScale1" @@ -283,7 +283,7 @@       decimal_digits="2"       label_width="0"       layout="topleft" -     left="265" +     left="290"       max_val="1024"       min_val="-1024"       name="FlycamAxisScale1" @@ -294,9 +294,9 @@       bottom="164"       halign="right"       layout="topleft" -     left="20" +     left="3"       name="YScale" -     width="94"> +     width="140">          Y Scale      </text>      <spinner @@ -305,7 +305,7 @@       decimal_digits="2"       label_width="0"       layout="topleft" -     left="125" +     left="150"       max_val="50"       min_val="-50"       name="AvatarAxisScale2" @@ -316,7 +316,7 @@       decimal_digits="2"       label_width="0"       layout="topleft" -     left="195" +     left="220"       max_val="1024"       min_val="-1024"       name="BuildAxisScale2" @@ -327,7 +327,7 @@       decimal_digits="2"       label_width="0"       layout="topleft" -     left="265" +     left="290"       max_val="1024"       min_val="-1024"       name="FlycamAxisScale2" @@ -338,9 +338,9 @@       bottom="184"       halign="right"       layout="topleft" -     left="20" +     left="3"       name="ZScale" -     width="94"> +     width="140">          Z Scale      </text>      <spinner @@ -349,7 +349,7 @@       decimal_digits="2"       label_width="0"       layout="topleft" -     left="125" +     left="150"       max_val="50"       min_val="-50"       name="AvatarAxisScale0" @@ -360,7 +360,7 @@       decimal_digits="2"       label_width="0"       layout="topleft" -     left="195" +     left="220"       max_val="1024"       min_val="-1024"       name="BuildAxisScale0" @@ -371,7 +371,7 @@       decimal_digits="2"       label_width="0"       layout="topleft" -     left="265" +     left="290"       max_val="1024"       min_val="-1024"       name="FlycamAxisScale0" @@ -382,9 +382,9 @@       bottom="204"       halign="right"       layout="topleft" -     left="20" +     left="3"       name="PitchScale" -     width="94"> +     width="140">          Pitch Scale      </text>      <spinner @@ -393,7 +393,7 @@       decimal_digits="2"       label_width="0"       layout="topleft" -     left="125" +     left="150"       max_val="1024"       min_val="-1024"       name="AvatarAxisScale4" @@ -404,7 +404,7 @@       decimal_digits="2"       label_width="0"       layout="topleft" -     left="195" +     left="220"       max_val="1024"       min_val="-1024"       name="BuildAxisScale4" @@ -415,7 +415,7 @@       decimal_digits="2"       label_width="0"       layout="topleft" -     left="265" +     left="290"       max_val="1024"       min_val="-1024"       name="FlycamAxisScale4" @@ -426,9 +426,9 @@       bottom="224"       halign="right"       layout="topleft" -     left="20" +     left="3"       name="YawScale" -     width="94"> +     width="140">          Yaw Scale      </text>      <spinner @@ -437,7 +437,7 @@       decimal_digits="2"       label_width="0"       layout="topleft" -     left="125" +     left="150"       max_val="1024"       min_val="-1024"       name="AvatarAxisScale5" @@ -448,7 +448,7 @@       decimal_digits="2"       label_width="0"       layout="topleft" -     left="195" +     left="220"       max_val="1024"       min_val="-1024"       name="BuildAxisScale5" @@ -459,7 +459,7 @@       decimal_digits="2"       label_width="0"       layout="topleft" -     left="265" +     left="290"       max_val="1024"       min_val="-1024"       name="FlycamAxisScale5" @@ -470,9 +470,9 @@       bottom="244"       halign="right"       layout="topleft" -     left="20" +     left="3"       name="RollScale" -     width="94"> +     width="140">          Roll Scale      </text>      <spinner @@ -481,7 +481,7 @@       decimal_digits="2"       label_width="0"       layout="topleft" -     left="195" +     left="220"       max_val="1024"       min_val="-1024"       name="BuildAxisScale3" @@ -492,7 +492,7 @@       decimal_digits="2"       label_width="0"       layout="topleft" -     left="265" +     left="290"       max_val="1024"       min_val="-1024"       name="FlycamAxisScale3" @@ -503,9 +503,9 @@       bottom="274"       halign="right"       layout="topleft" -     left="20" +     left="3"       name="XDeadZone" -     width="94"> +     width="140">          X Dead Zone      </text>      <spinner @@ -515,7 +515,7 @@       increment="0.01"       label_width="0"       layout="topleft" -     left="125" +     left="150"       name="AvatarAxisDeadZone1"       width="56" />      <spinner @@ -525,7 +525,7 @@       increment="0.01"       label_width="0"       layout="topleft" -     left="195" +     left="220"       name="BuildAxisDeadZone1"       width="56" />      <spinner @@ -535,7 +535,7 @@       increment="0.01"       label_width="0"       layout="topleft" -     left="265" +     left="290"       name="FlycamAxisDeadZone1"       width="56" />      <text @@ -544,9 +544,9 @@       bottom="294"       halign="right"       layout="topleft" -     left="20" +     left="3"       name="YDeadZone" -     width="94"> +     width="140">          Y Dead Zone      </text>      <spinner @@ -556,7 +556,7 @@       increment="0.01"       label_width="0"       layout="topleft" -     left="125" +     left="150"       name="AvatarAxisDeadZone2"       width="56" />      <spinner @@ -566,7 +566,7 @@       increment="0.01"       label_width="0"       layout="topleft" -     left="195" +     left="220"       name="BuildAxisDeadZone2"       width="56" />      <spinner @@ -576,7 +576,7 @@       increment="0.01"       label_width="0"       layout="topleft" -     left="265" +     left="290"       name="FlycamAxisDeadZone2"       width="56" />      <text @@ -585,9 +585,9 @@       bottom="314"       halign="right"       layout="topleft" -     left="20" +     left="3"       name="ZDeadZone" -     width="94"> +     width="140">          Z Dead Zone      </text>      <spinner @@ -597,7 +597,7 @@       increment="0.01"       label_width="0"       layout="topleft" -     left="125" +     left="150"       name="AvatarAxisDeadZone0"       width="56" />      <spinner @@ -607,7 +607,7 @@       increment="0.01"       label_width="0"       layout="topleft" -     left="195" +     left="220"       name="BuildAxisDeadZone0"       width="56" />      <spinner @@ -617,7 +617,7 @@       increment="0.01"       label_width="0"       layout="topleft" -     left="265" +     left="290"       name="FlycamAxisDeadZone0"       width="56" />      <text @@ -626,9 +626,9 @@       bottom="334"       halign="right"       layout="topleft" -     left="20" +     left="2"       name="PitchDeadZone" -     width="94"> +     width="140">          Pitch Dead Zone      </text>      <spinner @@ -638,7 +638,7 @@       increment="0.01"       label_width="0"       layout="topleft" -     left="125" +     left="150"       name="AvatarAxisDeadZone4"       width="56" />      <spinner @@ -648,7 +648,7 @@       increment="0.01"       label_width="0"       layout="topleft" -     left="195" +     left="220"       name="BuildAxisDeadZone4"       width="56" />      <spinner @@ -658,7 +658,7 @@       increment="0.01"       label_width="0"       layout="topleft" -     left="265" +     left="290"       name="FlycamAxisDeadZone4"       width="56" />      <text @@ -667,9 +667,9 @@       bottom="354"       halign="right"       layout="topleft" -     left="20" +     left="3"       name="YawDeadZone" -     width="94"> +     width="140">          Yaw Dead Zone      </text>      <spinner @@ -679,7 +679,7 @@       increment="0.01"       label_width="0"       layout="topleft" -     left="125" +     left="150"       name="AvatarAxisDeadZone5"       width="56" />      <spinner @@ -689,7 +689,7 @@       increment="0.01"       label_width="0"       layout="topleft" -     left="195" +     left="220"       name="BuildAxisDeadZone5"       width="56" />      <spinner @@ -699,7 +699,7 @@       increment="0.01"       label_width="0"       layout="topleft" -     left="265" +     left="290"       name="FlycamAxisDeadZone5"       width="56" />      <text @@ -708,9 +708,9 @@       bottom="374"       halign="right"       layout="topleft" -     left="20" +     left="3"       name="RollDeadZone" -     width="94"> +     width="140">          Roll Dead Zone      </text>      <spinner @@ -720,7 +720,7 @@       increment="0.01"       label_width="0"       layout="topleft" -     left="195" +     left="220"       name="BuildAxisDeadZone3"       width="56" />      <spinner @@ -730,7 +730,7 @@       increment="0.01"       label_width="0"       layout="topleft" -     left="265" +     left="290"       name="FlycamAxisDeadZone3"       width="56" />      <text @@ -739,9 +739,9 @@       bottom="402"       halign="right"       layout="topleft" -     left="20" +     left="3"       name="Feathering" -     width="94"> +     width="140">          Feathering      </text>      <slider @@ -752,7 +752,7 @@       increment="1"       initial_value="0.7"       layout="topleft" -     left="116" +     left="141"       max_val="32"       min_val="1"       name="AvatarFeathering" @@ -795,9 +795,9 @@       bottom="430"       halign="right"       layout="topleft" -     left="20" +     left="3"       name="ZoomScale2" -     width="94"> +     width="140">          Zoom Scale      </text>      <spinner @@ -806,7 +806,7 @@       decimal_digits="2"       label_width="0"       layout="topleft" -     left="265" +     left="290"       max_val="1024"       min_val="-1024"       name="FlycamAxisScale6" @@ -817,9 +817,9 @@       bottom="450"       halign="right"       layout="topleft" -     left="20" +     left="3"       name="ZoomDeadZone" -     width="96"> +     width="140">          Zoom Dead Zone      </text>      <spinner @@ -829,7 +829,7 @@       increment="0.01"       label_width="0"       layout="topleft" -     left="265" +     left="290"       name="FlycamAxisDeadZone6"       width="56" />      <button @@ -837,10 +837,10 @@       height="22"       label="SpaceNavigator Defaults"       layout="topleft" -     left="340" +     left="359"       name="SpaceNavigatorDefaults"       top="429" -     width="184" /> +     width="200" />      <button       follows="right|bottom"       height="20" @@ -850,7 +850,7 @@       left_delta="0"       name="ok_btn"       top_pad="9" -     width="90" /> +     width="98" />      <button       follows="right|bottom"       height="20" @@ -860,5 +860,5 @@       left_pad="4"       name="cancel_btn"       top_delta="0" -     width="90" /> +     width="98" />  </floater> diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 9ee4e13f3c..6c9564c8cf 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -5165,7 +5165,7 @@ An object named [OBJECTFROMNAME] owned by (an unknown Resident) has given you th     type="offer">  [NAME_SLURL] has offered to teleport you to their location: -[MESSAGE] +[MESSAGE], ([MATURITY])      <form name="form">        <button         index="0" diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml index 7ec1ca2e2e..96c76576c0 100644 --- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml @@ -119,7 +119,7 @@  	     commit_on_focus_lost="false"  	     follows="right|top"  	     halign="right" -	     height="22" +	     height="23"  	     label="Search"  	     layout="topleft"  	     right="-10" diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml index a43b244fa0..9725e9952a 100644 --- a/indra/newview/skins/default/xui/en/panel_place_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml @@ -321,6 +321,7 @@               follows="all"               height="223"               layout="topleft" +             single_expansion="true"               left="0"               name="advanced_info_accordion"               top_pad="10" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index b0bf51c214..813f59ff89 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -148,6 +148,8 @@  	<!-- Group name: text shown for LLUUID::null -->  	<string name="GroupNameNone">(none)</string> +	<string name="AvalineCaller">Avaline Caller [ORDER]</string> +  	<!-- Asset errors. Used in llassetstorage.cpp, translation from error code to error message. -->  	<string name="AssetErrorNone">No error</string>  	<string name="AssetErrorRequestFailed">Asset request: failed</string> diff --git a/indra/newview/skins/default/xui/es/floater_joystick.xml b/indra/newview/skins/default/xui/es/floater_joystick.xml index dbd2e4f04e..2c1804bd90 100644 --- a/indra/newview/skins/default/xui/es/floater_joystick.xml +++ b/indra/newview/skins/default/xui/es/floater_joystick.xml @@ -16,7 +16,7 @@  		Modos de control:  	</text>  	<check_box label="Avatar" name="JoystickAvatarEnabled"/> -	<check_box label="Construir" left="192" name="JoystickBuildEnabled"/> +	<check_box label="Construir" name="JoystickBuildEnabled"/>  	<check_box label="Flycam" name="JoystickFlycamEnabled"/>  	<text name="XScale">  		Escala: X @@ -27,7 +27,7 @@  	<text name="ZScale">  		Escala: Z  	</text> -	<text left="3" name="PitchScale" width="115"> +	<text name="PitchScale">  		Escala: arriba/abajo  	</text>  	<text name="YawScale"> @@ -45,10 +45,10 @@  	<text name="ZDeadZone">  		Zona muerta Z  	</text> -	<text left="3" name="PitchDeadZone" width="115"> +	<text name="PitchDeadZone">  		Zona muerta arri./aba.  	</text> -	<text left="3" name="YawDeadZone" width="115"> +	<text name="YawDeadZone">  		Zona muerta izq./der.  	</text>  	<text name="RollDeadZone"> @@ -63,7 +63,7 @@  	<text name="ZoomDeadZone">  		Zona muerta zoom  	</text> -	<button font="SansSerifSmall" label="Por defecto del SpaceNavigator" left="330" name="SpaceNavigatorDefaults" width="210"/> +	<button font="SansSerifSmall" label="Por defecto del SpaceNavigator" name="SpaceNavigatorDefaults"/>  	<button label="OK" label_selected="OK" left="330" name="ok_btn"/>  	<button label="Cancelar" label_selected="Cancelar" left_delta="120" name="cancel_btn"/>  	<stat_view label="Monitor del joystick" name="axis_view"> diff --git a/indra/newview/skins/default/xui/fr/floater_joystick.xml b/indra/newview/skins/default/xui/fr/floater_joystick.xml index e00f9564e8..02ac21bf82 100644 --- a/indra/newview/skins/default/xui/fr/floater_joystick.xml +++ b/indra/newview/skins/default/xui/fr/floater_joystick.xml @@ -26,7 +26,7 @@  	<text name="ZScale">  		Échelle des Z  	</text> -	<text left="9" name="PitchScale" width="104"> +	<text name="PitchScale">  		Échelle du tangage  	</text>  	<text name="YawScale"> @@ -44,13 +44,13 @@  	<text name="ZDeadZone">  		Zone neutre Z  	</text> -	<text left="4" name="PitchDeadZone" width="116"> +	<text name="PitchDeadZone">  		Zone neutre tangage  	</text> -	<text name="YawDeadZone" left="10" width="104"> +	<text name="YawDeadZone">  		Zone neutre lacet  	</text> -	<text name="RollDeadZone" left="10" width="104"> +	<text name="RollDeadZone">  		Zone neutre roulis  	</text>  	<text name="Feathering"> @@ -59,7 +59,7 @@  	<text name="ZoomScale2">  		Échelle du zoom  	</text> -	<text left="6" name="ZoomDeadZone" width="120"> +	<text name="ZoomDeadZone">  		Zone neutre du zoom  	</text>  	<button label="Options par défaut du joystick" name="SpaceNavigatorDefaults"/> diff --git a/indra/newview/skins/default/xui/it/floater_joystick.xml b/indra/newview/skins/default/xui/it/floater_joystick.xml index 3eff0cfceb..3d60ded7ab 100644 --- a/indra/newview/skins/default/xui/it/floater_joystick.xml +++ b/indra/newview/skins/default/xui/it/floater_joystick.xml @@ -16,7 +16,7 @@  		Modalità di controllo:  	</text>  	<check_box label="Avatar" name="JoystickAvatarEnabled"/> -	<check_box label="Costruire" left="192" name="JoystickBuildEnabled"/> +	<check_box label="Costruire" name="JoystickBuildEnabled"/>  	<check_box label="Camera dall'alto" name="JoystickFlycamEnabled"/>  	<text name="XScale">  		Regolazione X @@ -27,13 +27,13 @@  	<text name="ZScale">  		Regolazione Z  	</text> -	<text left="3" name="PitchScale" width="112"> +	<text name="PitchScale">  		Regolazione: Pitch  	</text> -	<text left="3" name="YawScale" width="112"> +	<text name="YawScale">  		Regolazione: Yaw  	</text> -	<text left="3" name="RollScale" width="112"> +	<text name="RollScale">  		Regolazione: Roll  	</text>  	<text name="XDeadZone"> @@ -45,22 +45,22 @@  	<text name="ZDeadZone">  		Angolo morto Z  	</text> -	<text left="3" name="PitchDeadZone" width="112"> +	<text name="PitchDeadZone">  		Angolo morto: Pitch  	</text> -	<text left="3" name="YawDeadZone" width="112"> +	<text name="YawDeadZone">  		Angolo morto: Yaw  	</text> -	<text left="3" name="RollDeadZone" width="112"> +	<text name="RollDeadZone">  		Angolo morto: Roll  	</text>  	<text name="Feathering">  		Smussamento  	</text> -	<text left="6" name="ZoomScale2" width="135"> +	<text  name="ZoomScale2">  		Regolazione dello zoom  	</text> -	<text left="6" name="ZoomDeadZone" width="135"> +	<text name="ZoomDeadZone" width="140">  		Angolo morto dello zoom  	</text>  	<button label="SpaceNavigator Defaults" name="SpaceNavigatorDefaults"/> diff --git a/indra/newview/skins/default/xui/nl/floater_joystick.xml b/indra/newview/skins/default/xui/nl/floater_joystick.xml index 505e3cd719..1d590dc1f3 100644 --- a/indra/newview/skins/default/xui/nl/floater_joystick.xml +++ b/indra/newview/skins/default/xui/nl/floater_joystick.xml @@ -45,7 +45,7 @@  	<text name="ZDeadZone">  		Z dode zone  	</text> -	<text name="PitchDeadZone" left="4" width="110"> +	<text name="PitchDeadZone">  		Stampen dode zone  	</text>  	<text name="YawDeadZone"> diff --git a/indra/newview/skins/default/xui/pl/floater_joystick.xml b/indra/newview/skins/default/xui/pl/floater_joystick.xml index 78742c39d1..2b1e362b98 100644 --- a/indra/newview/skins/default/xui/pl/floater_joystick.xml +++ b/indra/newview/skins/default/xui/pl/floater_joystick.xml @@ -1,108 +1,108 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Joystick" title="KONFIGURACJA JOYSTICKA" width="590"> +<floater name="Joystick" title="KONFIGURACJA JOYSTICKA">  	<check_box label="Aktywuj Joystick:" name="enable_joystick"/>  	<text left="130" name="joystick_type" width="360"/>  	<spinner label="Kalibracja Osi X" label_width="130" left="20" name="JoystickAxis1" width="170"/>  	<spinner label="Kalibracja Osi Y" label_width="130" left="210" name="JoystickAxis2" width="170"/> -	<spinner label="Kalibracja Osi Z" label_width="130" left="400" name="JoystickAxis0" width="170"/> +	<spinner label="Kalibracja Osi Z" label_width="100" left="400" name="JoystickAxis0" width="140"/>  	<spinner label="Kalibracja wznoszenia" label_width="130" left="20" name="JoystickAxis4" width="170"/>  	<spinner label="Kalibracja wychylania" label_width="130" left="210" name="JoystickAxis5" width="170"/> -	<spinner label="Kalibracja obrotu" label_width="130" left="400" name="JoystickAxis3" width="170"/> +	<spinner label="Kalibracja obrotu" label_width="100" left="400" name="JoystickAxis3" width="140"/>  	<spinner label="Kalibracja powiększania" label_width="130" name="JoystickAxis6" width="170"/>  	<check_box label="Bezpośrednie" left="205" name="ZoomDirect"/>  	<check_box label="Kursor 3D" left="340" name="Cursor3D"/>  	<check_box label="Automatyczne" left="450" name="AutoLeveling"/> -	<text left="22" name="Control Modes:"> +	<text name="Control Modes:">  		Kontroluj:  	</text> -	<check_box label="Awatara" left="130" name="JoystickAvatarEnabled" width="90"/> -	<check_box label="Budowanie" left="205" name="JoystickBuildEnabled" width="90"/> -	<check_box label="Kamerę podczas latania" left="282" name="JoystickFlycamEnabled" width="90"/> -	<text name="XScale" width="104"> +	<check_box label="Awatara" name="JoystickAvatarEnabled" width="90"/> +	<check_box label="Budowanie" name="JoystickBuildEnabled" width="90"/> +	<check_box label="Kamerę podczas latania" left="300" name="JoystickFlycamEnabled" width="90"/> +	<text name="XScale">  		Skala X  	</text> -	<spinner left="133" name="AvatarAxisScale1"/> -	<spinner left="208" name="BuildAxisScale1"/> -	<spinner left="283" name="FlycamAxisScale1"/> -	<text name="YScale" width="104"> +	<spinner name="AvatarAxisScale1"/> +	<spinner name="BuildAxisScale1"/> +	<spinner left="300" name="FlycamAxisScale1"/> +	<text name="YScale">  		Skala Y  	</text> -	<spinner left="133" name="AvatarAxisScale2"/> -	<spinner left="208" name="BuildAxisScale2"/> -	<spinner left="283" name="FlycamAxisScale2"/> -	<text name="ZScale" width="104"> +	<spinner name="AvatarAxisScale2"/> +	<spinner name="BuildAxisScale2"/> +	<spinner left="300" name="FlycamAxisScale2"/> +	<text name="ZScale">  		Skala Z  	</text> -	<spinner left="133" name="AvatarAxisScale0"/> -	<spinner left="208" name="BuildAxisScale0"/> -	<spinner left="283" name="FlycamAxisScale0"/> -	<text name="PitchScale" width="104"> +	<spinner name="AvatarAxisScale0"/> +	<spinner name="BuildAxisScale0"/> +	<spinner left="300" name="FlycamAxisScale0"/> +	<text name="PitchScale">  		Skala wznoszenia  	</text> -	<spinner left="133" name="AvatarAxisScale4"/> -	<spinner left="208" name="BuildAxisScale4"/> -	<spinner left="283" name="FlycamAxisScale4"/> -	<text name="YawScale" width="104"> +	<spinner name="AvatarAxisScale4"/> +	<spinner name="BuildAxisScale4"/> +	<spinner left="300" name="FlycamAxisScale4"/> +	<text name="YawScale">  		Skala odchylania  	</text> -	<spinner left="133" name="AvatarAxisScale5"/> -	<spinner left="208" name="BuildAxisScale5"/> -	<spinner left="283" name="FlycamAxisScale5"/> -	<text name="RollScale" width="104"> +	<spinner name="AvatarAxisScale5"/> +	<spinner name="BuildAxisScale5"/> +	<spinner left="300" name="FlycamAxisScale5"/> +	<text name="RollScale">  		Skala obrotu  	</text> -	<spinner left="208" name="BuildAxisScale3"/> -	<spinner left="283" name="FlycamAxisScale3"/> -	<text name="XDeadZone" width="104"> +	<spinner name="BuildAxisScale3"/> +	<spinner left="300" name="FlycamAxisScale3"/> +	<text name="XDeadZone">  		Tolerancja osi X  	</text> -	<spinner left="133" name="AvatarAxisDeadZone1"/> -	<spinner left="208" name="BuildAxisDeadZone1"/> -	<spinner left="283" name="FlycamAxisDeadZone1"/> -	<text name="YDeadZone" width="104"> +	<spinner name="AvatarAxisDeadZone1"/> +	<spinner name="BuildAxisDeadZone1"/> +	<spinner left="300" name="FlycamAxisDeadZone1"/> +	<text name="YDeadZone">  		Tolerancja osi Y  	</text> -	<spinner left="133" name="AvatarAxisDeadZone2"/> -	<spinner left="208" name="BuildAxisDeadZone2"/> -	<spinner left="283" name="FlycamAxisDeadZone2"/> -	<text name="ZDeadZone" width="104"> +	<spinner name="AvatarAxisDeadZone2"/> +	<spinner name="BuildAxisDeadZone2"/> +	<spinner left="300" name="FlycamAxisDeadZone2"/> +	<text name="ZDeadZone">  		Tolerancja osi Z  	</text> -	<spinner left="133" name="AvatarAxisDeadZone0"/> -	<spinner left="208" name="BuildAxisDeadZone0"/> -	<spinner left="283" name="FlycamAxisDeadZone0"/> -	<text name="PitchDeadZone" width="104"> +	<spinner name="AvatarAxisDeadZone0"/> +	<spinner name="BuildAxisDeadZone0"/> +	<spinner left="300" name="FlycamAxisDeadZone0"/> +	<text name="PitchDeadZone">  		Tolerancja wznoszenia  	</text> -	<spinner left="133" name="AvatarAxisDeadZone4"/> -	<spinner left="208" name="BuildAxisDeadZone4"/> -	<spinner left="283" name="FlycamAxisDeadZone4"/> -	<text name="YawDeadZone" width="104"> +	<spinner name="AvatarAxisDeadZone4"/> +	<spinner name="BuildAxisDeadZone4"/> +	<spinner left="300" name="FlycamAxisDeadZone4"/> +	<text name="YawDeadZone">  		Tolerancja odchylania  	</text> -	<spinner left="133" name="AvatarAxisDeadZone5"/> -	<spinner left="208" name="BuildAxisDeadZone5"/> -	<spinner left="283" name="FlycamAxisDeadZone5"/> -	<text name="RollDeadZone" width="104"> +	<spinner name="AvatarAxisDeadZone5"/> +	<spinner name="BuildAxisDeadZone5"/> +	<spinner left="300" name="FlycamAxisDeadZone5"/> +	<text name="RollDeadZone">  		Tolerancja obrotu  	</text> -	<spinner left="208" name="BuildAxisDeadZone3"/> -	<spinner left="283" name="FlycamAxisDeadZone3"/> -	<text name="Feathering" width="104"> +	<spinner name="BuildAxisDeadZone3"/> +	<spinner left="300" name="FlycamAxisDeadZone3"/> +	<text name="Feathering">  		Przenikanie  	</text> -	<slider label="" left="125" name="AvatarFeathering"/> -	<slider label="" left="200" name="BuildFeathering"/> -	<slider label="" left="275" name="FlycamFeathering"/> -	<text name="ZoomScale2" width="104"> +	<slider label="" name="AvatarFeathering"/> +	<slider label="" name="BuildFeathering"/> +	<slider label="" left_delta="81" name="FlycamFeathering"/> +	<text name="ZoomScale2">  		Skala powiększania  	</text> -	<spinner label="" left="283" name="FlycamAxisScale6"/> -	<text name="ZoomDeadZone" width="104"> +	<spinner label="" left="300" name="FlycamAxisScale6"/> +	<text name="ZoomDeadZone">  		Tolerancja powiększania  	</text> -	<spinner label="" left="283" name="FlycamAxisDeadZone6"/> -	<button label="Ustawienia domyślne" left="366" name="SpaceNavigatorDefaults"/> +	<spinner label="" left="300" name="FlycamAxisDeadZone6"/> +	<button label="Ustawienia domyślne" name="SpaceNavigatorDefaults"/>  	<button label="OK" label_selected="OK" left="366" name="ok_btn"/>  	<button label="Anuluj" label_selected="Anuluj" name="cancel_btn"/>  	<stat_view label="Monitor Joysticka" name="axis_view"> diff --git a/indra/newview/skins/default/xui/pt/floater_joystick.xml b/indra/newview/skins/default/xui/pt/floater_joystick.xml index ecc4fcc9e9..98d8c0e319 100644 --- a/indra/newview/skins/default/xui/pt/floater_joystick.xml +++ b/indra/newview/skins/default/xui/pt/floater_joystick.xml @@ -16,7 +16,7 @@  		Modos de Controle:  	</text>  	<check_box label="Avatar" name="JoystickAvatarEnabled"/> -	<check_box label="Construir" left="192" name="JoystickBuildEnabled"/> +	<check_box label="Construir" name="JoystickBuildEnabled"/>  	<check_box label="Camera aérea" name="JoystickFlycamEnabled"/>  	<text name="XScale">  		Escala X @@ -27,13 +27,13 @@  	<text name="ZScale">  		Escala Z  	</text> -	<text left="3" name="PitchScale" width="115"> +	<text name="PitchScale">  		Escala de Elevação  	</text> -	<text left="3" name="YawScale" width="115"> +	<text name="YawScale">  		Escala da Guinada  	</text> -	<text left="3" name="RollScale" width="115"> +	<text name="RollScale">  		Escala de Rolagem  	</text>  	<text name="XDeadZone"> @@ -45,13 +45,13 @@  	<text name="ZDeadZone">  		Zona Morta Z  	</text> -	<text left="3" name="PitchDeadZone" width="115"> +	<text name="PitchDeadZone">  		Zona Morta: Elevação  	</text> -	<text left="3" name="YawDeadZone" width="115"> +	<text name="YawDeadZone">  		Zona Morta: Guinada  	</text> -	<text left="3" name="RollDeadZone" width="115"> +	<text name="RollDeadZone">  		Zona Morta: Rolagem  	</text>  	<text name="Feathering"> @@ -60,7 +60,7 @@  	<text name="ZoomScale2">  		Escala de Zoom  	</text> -	<text left="4" name="ZoomDeadZone" width="110"> +	<text name="ZoomDeadZone">  		Zona Morta de Zoom  	</text>  	<button font="SansSerifSmall" label="Padrões do SpaceNavigator" name="SpaceNavigatorDefaults"/>  | 
