summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/newview/llavatarlist.cpp75
-rw-r--r--indra/newview/llavatarlist.h25
-rw-r--r--indra/newview/llavatarlistitem.cpp12
-rw-r--r--indra/newview/llavatarlistitem.h2
-rw-r--r--indra/newview/llparticipantlist.cpp210
-rw-r--r--indra/newview/llparticipantlist.h5
-rw-r--r--indra/newview/llspeakers.h8
-rw-r--r--indra/newview/llviewermessage.cpp57
-rw-r--r--indra/newview/skins/default/xui/en/floater_joystick.xml154
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml2
-rw-r--r--indra/newview/skins/default/xui/en/strings.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_joystick.xml10
-rw-r--r--indra/newview/skins/default/xui/fr/floater_joystick.xml10
-rw-r--r--indra/newview/skins/default/xui/it/floater_joystick.xml18
-rw-r--r--indra/newview/skins/default/xui/nl/floater_joystick.xml2
-rw-r--r--indra/newview/skins/default/xui/pl/floater_joystick.xml124
-rw-r--r--indra/newview/skins/default/xui/pt/floater_joystick.xml16
17 files changed, 557 insertions, 175 deletions
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/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/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&apos;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"/>