merge from PE's viewer-trunk
commit
9f0f610682
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -119,7 +119,7 @@
|
|||
commit_on_focus_lost="false"
|
||||
follows="right|top"
|
||||
halign="right"
|
||||
height="22"
|
||||
height="23"
|
||||
label="Search"
|
||||
layout="topleft"
|
||||
right="-10"
|
||||
|
|
|
|||
|
|
@ -321,6 +321,7 @@
|
|||
follows="all"
|
||||
height="223"
|
||||
layout="topleft"
|
||||
single_expansion="true"
|
||||
left="0"
|
||||
name="advanced_info_accordion"
|
||||
top_pad="10"
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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"/>
|
||||
|
|
|
|||
|
|
@ -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"/>
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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"/>
|
||||
|
|
|
|||
Loading…
Reference in New Issue