# Conflicts:
#	indra/newview/llsidepanelinventory.h
#	indra/newview/skins/ansastorm/xui/en/sidepanel_inventory.xml
#	indra/newview/skins/default/xui/en/sidepanel_inventory.xml
master
Ansariel 2023-06-27 00:14:04 +02:00
commit 4df4d9cabf
98 changed files with 516 additions and 612 deletions

View File

@ -1083,11 +1083,11 @@
<key>archive</key>
<map>
<key>hash</key>
<string>eebbcd0757dd28646ebb4505e7af140e</string>
<string>9d9f72f50cffe7443e4b58f009ffc1f4</string>
<key>hash_algorithm</key>
<string>md5</string>
<key>url</key>
<string>file:///opt/firestorm/fmodstudio-2.02.13-darwin64-6.tar.bz2</string>
<string>file:///opt/firestorm/fmodstudio-2.02.15-darwin64-9.tar.bz2</string>
</map>
<key>name</key>
<string>darwin64</string>
@ -1097,11 +1097,11 @@
<key>archive</key>
<map>
<key>hash</key>
<string>5fee0f9587f50531211ff9e1e860692f</string>
<string>79fb2f09d2c81ed6464e11af36566910</string>
<key>hash_algorithm</key>
<string>md5</string>
<key>url</key>
<string>file:///opt/firestorm/fmodstudio-2.02.13-linux64-230861132.tar.bz2</string>
<string>file:///opt/firestorm/fmodstudio-2.02.15-linux64-231741426.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -1111,11 +1111,11 @@
<key>archive</key>
<map>
<key>hash</key>
<string>99c928b18a0d2f08b0ee33fca90c4118</string>
<string>c1bce2b362c31345200297a4010626e9</string>
<key>hash_algorithm</key>
<string>md5</string>
<key>url</key>
<string>file:///c:/cygwin/opt/firestorm/fmodstudio-2.02.13-windows-230860911.tar.bz2</string>
<string>file:///c:/cygwin/opt/firestorm/fmodstudio-2.02.15-windows-231741106.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
@ -1125,18 +1125,18 @@
<key>archive</key>
<map>
<key>hash</key>
<string>01946a6427d126570607c02b75560f02</string>
<string>cd0e8f58fece3eac0b5ebe21f354bf8c</string>
<key>hash_algorithm</key>
<string>md5</string>
<key>url</key>
<string>file:///c:/cygwin/opt/firestorm/fmodstudio-2.02.13-windows64-230860913.tar.bz2</string>
<string>file:///c:/cygwin/opt/firestorm/fmodstudio-2.02.15-windows64-231741113.tar.bz2</string>
</map>
<key>name</key>
<string>windows64</string>
</map>
</map>
<key>version</key>
<string>2.02.13</string>
<string>2.02.15</string>
</map>
<key>fontconfig</key>
<map>

View File

@ -72,7 +72,11 @@ typedef enum e_chat_style
CHAT_STYLE_IRC,
CHAT_STYLE_HISTORY,
CHAT_STYLE_TELEPORT_SEP,
CHAT_STYLE_MODERATOR
// <FS:Zi> Add a distinct color for server side group chat replay
// CHAT_STYLE_MODERATOR
CHAT_STYLE_MODERATOR,
CHAT_STYLE_SERVER_HISTORY
// </FS:Zi>
}EChatStyle;
// A piece of chat

View File

@ -53,6 +53,8 @@
#include "llvoavatarself.h" // for gAgentAvatarp
#include "llavatarnamecache.h"
#include "fsassetblacklist.h"
constexpr S32 MAX_ANIMATIONS = 100;
// --------------------------------------------------------------------------
@ -157,13 +159,13 @@ BOOL AnimationExplorer::postBuild()
{
mAnimationScrollList = getChild<LLScrollListCtrl>("animation_list");
mStopButton = getChild<LLButton>("stop_btn");
mRevokeButton = getChild<LLButton>("revoke_btn");
mBlacklistButton = getChild<LLButton>("blacklist_btn");
mStopAndRevokeButton = getChild<LLButton>("stop_and_revoke_btn");
mNoOwnedAnimationsCheckBox = getChild<LLCheckBoxCtrl>("no_owned_animations_check");
mAnimationScrollList->setCommitCallback(boost::bind(&AnimationExplorer::onSelectAnimation, this));
mStopButton->setCommitCallback(boost::bind(&AnimationExplorer::onStopPressed, this));
mRevokeButton->setCommitCallback(boost::bind(&AnimationExplorer::onRevokePressed, this));
mBlacklistButton->setCommitCallback(boost::bind(&AnimationExplorer::onBlacklistPressed, this));
mStopAndRevokeButton->setCommitCallback(boost::bind(&AnimationExplorer::onStopAndRevokePressed, this));
mNoOwnedAnimationsCheckBox->setCommitCallback(boost::bind(&AnimationExplorer::onOwnedCheckToggled, this));
@ -199,7 +201,7 @@ void AnimationExplorer::onSelectAnimation()
S32 column = mAnimationScrollList->getColumn("animation_id")->mIndex;
mCurrentAnimationID = item->getColumn(column)->getValue().asUUID();
column = mAnimationScrollList->getColumn("played_by")->mIndex;
column = mAnimationScrollList->getColumn("object_id")->mIndex;
mCurrentObject = item->getColumn(column)->getValue().asUUID();
startMotion(mCurrentAnimationID);
@ -214,23 +216,35 @@ void AnimationExplorer::onStopPressed()
}
}
void AnimationExplorer::onRevokePressed()
void AnimationExplorer::onBlacklistPressed()
{
if (mCurrentObject.notNull())
onStopPressed();
LLScrollListItem* item = mAnimationScrollList->getFirstSelected();
if (!item)
{
LLViewerObject* vo = gObjectList.findObject(mCurrentObject);
if (vo)
{
gAgentAvatarp->revokePermissionsOnObject(vo);
}
return;
}
S32 column = mAnimationScrollList->getColumn("played_by")->mIndex;
std::string region_name{};
if (gAgent.getRegion())
{
region_name = gAgent.getRegion()->getName();
}
FSAssetBlacklist::getInstance()->addNewItemToBlacklist(mCurrentAnimationID, item->getColumn(column)->getValue(), region_name, LLAssetType::AT_ANIMATION);
}
void AnimationExplorer::onStopAndRevokePressed()
{
onStopPressed();
onRevokePressed();
if (mCurrentObject.notNull())
{
if (LLViewerObject* vo = gObjectList.findObject(mCurrentObject); vo)
{
gAgentAvatarp->revokePermissionsOnObject(vo);
}
}
}
void AnimationExplorer::onOwnedCheckToggled()
@ -316,11 +330,10 @@ void AnimationExplorer::updateList(F64 current_timestamp)
// go through the list of playing animations to find out if this animation played by
// this object is still running
for (LLVOAvatar::AnimSourceIterator anim_iter = gAgentAvatarp->mAnimationSources.begin();
anim_iter != gAgentAvatarp->mAnimationSources.end(); ++anim_iter)
for (const auto& [anim_object_id, anim_anim_id] : gAgentAvatarp->mAnimationSources)
{
// object and animation found
if (anim_iter->first == object_id && anim_iter->second == anim_id)
if (anim_object_id == object_id && anim_anim_id == anim_id)
{
// set text to "Still playing" and break out of this loop
played_text->setText(LLTrans::getString("animation_explorer_still_playing"));
@ -343,8 +356,7 @@ void AnimationExplorer::updateList(F64 current_timestamp)
}
std::string prio_text = LLTrans::getString("animation_explorer_unknown_priority");
LLKeyframeMotion* motion = dynamic_cast<LLKeyframeMotion*>(gAgentAvatarp->findMotion(anim_id));
if (motion)
if (LLKeyframeMotion* motion = dynamic_cast<LLKeyframeMotion*>(gAgentAvatarp->findMotion(anim_id)); motion)
{
prio_text = llformat("%d", (S32)motion->getPriority());
}
@ -367,8 +379,7 @@ void AnimationExplorer::addAnimation(const LLUUID& id, const LLUUID& played_by,
std::string playedByName = played_by.asString();
// find out if the object is still in reach
LLViewerObject* vo = gObjectList.findObject(played_by);
if (vo)
if (LLViewerObject* vo = gObjectList.findObject(played_by); vo)
{
// if it was an avatar, get the name here
if (vo->isAvatar())
@ -450,8 +461,7 @@ void AnimationExplorer::addAnimation(const LLUUID& id, const LLUUID& played_by,
void AnimationExplorer::onAvatarNameCallback(const LLUUID& id, const LLAvatarName& av_name)
{
auto iter = mAvatarNameCacheConnections.find(id);
if (iter != mAvatarNameCacheConnections.end())
if (auto iter = mAvatarNameCacheConnections.find(id); iter != mAvatarNameCacheConnections.end())
{
if (iter->second.connected())
{
@ -478,10 +488,8 @@ void AnimationExplorer::requestNameCallback(LLMessageSystem* msg)
LLUUID object_id;
msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_ObjectID, object_id, index);
uuid_vec_t::iterator iter;
iter = std::find(mRequestedIDs.begin(), mRequestedIDs.end(), object_id);
// if this is one of the objects we were looking for, process the data
if (iter != mRequestedIDs.end())
if (auto iter = std::find(mRequestedIDs.begin(), mRequestedIDs.end(), object_id); iter != mRequestedIDs.end())
{
// get the name of the object
std::string object_name;
@ -502,11 +510,9 @@ void AnimationExplorer::updateListEntry(const LLUUID& id, const std::string& nam
S32 played_by_column = mAnimationScrollList->getColumn("played_by")->mIndex;
// find all scroll list entries with this object UUID and update the names there
std::vector<LLScrollListItem*> items = mAnimationScrollList->getAllData();
for (std::vector<LLScrollListItem*>::iterator list_iter = items.begin(); list_iter != items.end(); ++list_iter)
for (LLScrollListItem* item : mAnimationScrollList->getAllData())
{
LLScrollListItem* item = *list_iter;
LLUUID list_object_id = item->getColumn(object_id_column)->getValue().asUUID();
const LLUUID& list_object_id = item->getColumn(object_id_column)->getValue().asUUID();
if (id == list_object_id)
{

View File

@ -100,7 +100,7 @@ class AnimationExplorer
LLScrollListCtrl* mAnimationScrollList;
LLButton* mStopButton;
LLButton* mRevokeButton;
LLButton* mBlacklistButton;
LLButton* mStopAndRevokeButton;
LLCheckBoxCtrl* mNoOwnedAnimationsCheckBox;
@ -126,7 +126,7 @@ class AnimationExplorer
void onSelectAnimation();
void onStopPressed();
void onRevokePressed();
void onBlacklistPressed();
void onStopAndRevokePressed();
void onOwnedCheckToggled();
};

View File

@ -182,8 +182,8 @@ FSAreaSearch::FSAreaSearch(const LLSD& key) :
// Register an idle update callback
gIdleCallbacks.addFunction(idle, this);
mParcelChangedObserver = new FSParcelChangeObserver(this);
LLViewerParcelMgr::getInstance()->addObserver(mParcelChangedObserver);
mParcelChangedObserver = std::make_unique<FSParcelChangeObserver>(this);
LLViewerParcelMgr::getInstance()->addObserver(mParcelChangedObserver.get());
}
FSAreaSearch::~FSAreaSearch()
@ -209,9 +209,8 @@ FSAreaSearch::~FSAreaSearch()
if (mParcelChangedObserver)
{
LLViewerParcelMgr::getInstance()->removeObserver(mParcelChangedObserver);
delete mParcelChangedObserver;
mParcelChangedObserver = NULL;
LLViewerParcelMgr::getInstance()->removeObserver(mParcelChangedObserver.get());
mParcelChangedObserver = nullptr;
}
}
@ -252,9 +251,7 @@ void FSAreaSearch::draw()
for (const auto item : items)
{
LLViewerObject* objectp = gObjectList.findObject(item->getUUID());
if (objectp)
if (LLViewerObject* objectp = gObjectList.findObject(item->getUUID()); objectp)
{
const std::string& objectName = mObjectDetails[item->getUUID()].description;
gObjectList.addDebugBeacon(objectp->getPositionAgent(), objectName, mBeaconColor, mBeaconTextColor, beacon_line_width);
@ -299,7 +296,7 @@ void* FSAreaSearch::createPanelFilter(void* data)
void* FSAreaSearch::createPanelAdvanced(void* data)
{
FSAreaSearch* self = (FSAreaSearch*)data;
self->mPanelAdvanced = new FSPanelAreaSearchAdvanced(self);
self->mPanelAdvanced = new FSPanelAreaSearchAdvanced();
return self->mPanelAdvanced;
}
@ -324,8 +321,7 @@ void FSAreaSearch::checkRegion()
if (mActive)
{
// Check if we changed region, and if we did, clear the object details cache.
LLViewerRegion* region = gAgent.getRegion(); // getRegion can return NULL if disconnected.
if (region && (region != mLastRegion))
if (LLViewerRegion* region = gAgent.getRegion(); region && (region != mLastRegion))
{
if (!mExcludeNeighborRegions)
{
@ -459,8 +455,7 @@ void FSAreaSearch::findObjects()
if (object_it.second.request == FSObjectProperties::NEED || object_it.second.request == FSObjectProperties::SENT)
{
const LLUUID& id = object_it.second.id;
LLViewerObject* objectp = gObjectList.findObject(id);
if (!objectp)
if (LLViewerObject* objectp = gObjectList.findObject(id); !objectp)
{
object_it.second.request = FSObjectProperties::FAILED;
mRequested--;
@ -1035,8 +1030,7 @@ void FSAreaSearch::matchObject(FSObjectProperties& details, LLViewerObject* obje
row_params.columns.add(cell_params);
cell_params.column = "land_impact";
F32 cost = objectp->getLinksetCost();
if (cost > F_ALMOST_ZERO)
if (F32 cost = objectp->getLinksetCost(); cost > F_ALMOST_ZERO)
{
cell_params.value = cost;
}
@ -1098,14 +1092,11 @@ void FSAreaSearch::updateObjectCosts(const LLUUID& object_id, F32 object_cost, F
return;
}
FSScrollListCtrl* result_list = mPanelList->getResultList();
if (result_list)
if (FSScrollListCtrl* result_list = mPanelList->getResultList(); result_list)
{
LLScrollListItem* list_row = result_list->getItem(LLSD(object_id));
if (list_row)
if (LLScrollListItem* list_row = result_list->getItem(LLSD(object_id)); list_row)
{
LLScrollListColumn* list_column = result_list->getColumn("land_impact");
if (list_column)
if (LLScrollListColumn* list_column = result_list->getColumn("land_impact"); list_column)
{
LLScrollListCell* linkset_cost_cell = list_row->getColumn(list_column->mIndex);
linkset_cost_cell->setValue(LLSD(link_cost));
@ -1160,8 +1151,7 @@ void FSAreaSearch::avatarNameCacheCallback(const LLUUID& id, const LLAvatarName&
void FSAreaSearch::callbackLoadFullName(const LLUUID& id, const std::string& full_name )
{
auto iter = mNameCacheConnections.find(id);
if (iter != mNameCacheConnections.end())
if (auto iter = mNameCacheConnections.find(id); iter != mNameCacheConnections.end())
{
if (iter->second.connected())
{
@ -1444,8 +1434,7 @@ void FSPanelAreaSearchList::onDoubleClick()
}
const LLUUID& object_id = item->getUUID();
LLViewerObject* objectp = gObjectList.findObject(object_id);
if (objectp)
if (LLViewerObject* objectp = gObjectList.findObject(object_id); objectp)
{
FSObjectProperties& details = mFSAreaSearch->mObjectDetails[object_id];
LLTracker::trackLocation(objectp->getPositionGlobal(), details.name, "", LLTracker::LOCATION_ITEM);
@ -2060,10 +2049,6 @@ BOOL FSPanelAreaSearchFind::postBuild()
return LLPanel::postBuild();
}
// virtual
FSPanelAreaSearchFind::~FSPanelAreaSearchFind()
{ }
void FSPanelAreaSearchFind::onButtonClickedClear()
{
mNameLineEditor->clear();
@ -2180,10 +2165,6 @@ BOOL FSPanelAreaSearchFilter::postBuild()
return LLPanel::postBuild();
}
// virtual
FSPanelAreaSearchFilter::~FSPanelAreaSearchFilter()
{ }
void FSPanelAreaSearchFilter::onCommitCheckbox()
{
mFSAreaSearch->setFilterLocked(mCheckboxLocked->get());
@ -2280,10 +2261,6 @@ FSPanelAreaSearchOptions::FSPanelAreaSearchOptions(FSAreaSearch* pointer)
mEnableCallbackRegistrar.add("AreaSearch.EnableColumn", boost::bind(&FSPanelAreaSearchOptions::onEnableColumnVisibilityChecked, this, _2));
}
// virtual
FSPanelAreaSearchOptions::~FSPanelAreaSearchOptions()
{ }
void FSPanelAreaSearchOptions::onCommitCheckboxDisplayColumn(const LLSD& userdata)
{
const std::string& column_name = userdata.asStringRef();
@ -2306,11 +2283,6 @@ bool FSPanelAreaSearchOptions::onEnableColumnVisibilityChecked(const LLSD& userd
// Advanced tab
//---------------------------------------------------------------------------
FSPanelAreaSearchAdvanced::FSPanelAreaSearchAdvanced(FSAreaSearch* pointer)
: LLPanel()
{
}
BOOL FSPanelAreaSearchAdvanced::postBuild()
{
mCheckboxClickTouch = getChild<LLCheckBoxCtrl>("double_click_touch");
@ -2319,7 +2291,3 @@ BOOL FSPanelAreaSearchAdvanced::postBuild()
return LLPanel::postBuild();
}
// virtual
FSPanelAreaSearchAdvanced::~FSPanelAreaSearchAdvanced()
{ }

View File

@ -217,7 +217,7 @@ private:
class FSParcelChangeObserver;
friend class FSParcelChangeObserver;
FSParcelChangeObserver* mParcelChangedObserver;
std::unique_ptr<FSParcelChangeObserver> mParcelChangedObserver;
LLTabContainer* mTab;
FSPanelAreaSearchList* mPanelList;
@ -332,7 +332,7 @@ class FSPanelAreaSearchFind
LOG_CLASS(FSPanelAreaSearchFind);
public:
FSPanelAreaSearchFind(FSAreaSearch* pointer);
virtual ~FSPanelAreaSearchFind();
virtual ~FSPanelAreaSearchFind() = default;
/*virtual*/ BOOL postBuild();
/*virtual*/ BOOL handleKeyHere(KEY key,MASK mask);
@ -365,7 +365,7 @@ class FSPanelAreaSearchFilter
LOG_CLASS(FSPanelAreaSearchFilter);
public:
FSPanelAreaSearchFilter(FSAreaSearch* pointer);
virtual ~FSPanelAreaSearchFilter();
virtual ~FSPanelAreaSearchFilter() = default;
/*virtual*/ BOOL postBuild();
@ -410,7 +410,7 @@ class FSPanelAreaSearchOptions
LOG_CLASS(FSPanelAreaSearchOptions);
public:
FSPanelAreaSearchOptions(FSAreaSearch* pointer);
virtual ~FSPanelAreaSearchOptions();
virtual ~FSPanelAreaSearchOptions() = default;
private:
void onCommitCheckboxDisplayColumn(const LLSD& userdata);
@ -430,8 +430,8 @@ class FSPanelAreaSearchAdvanced
{
LOG_CLASS(FSPanelAreaSearchAdvanced);
public:
FSPanelAreaSearchAdvanced(FSAreaSearch* pointer);
virtual ~FSPanelAreaSearchAdvanced();
FSPanelAreaSearchAdvanced() = default;
virtual ~FSPanelAreaSearchAdvanced() = default;
/*virtual*/ BOOL postBuild();

View File

@ -54,6 +54,9 @@ LLAssetType::EType S32toAssetType(S32 assetindex)
case 6:
type = LLAssetType::AT_OBJECT;
break;
case 20:
type = LLAssetType::AT_ANIMATION;
break;
case 45:
type = LLAssetType::AT_PERSON;
break;
@ -114,8 +117,7 @@ bool FSAssetBlacklist::removeItem(const LLUUID& id)
{
gObjectList.removeDerenderedItem(id);
blacklist_data_t::iterator it;
it = mBlacklistData.find(id);
blacklist_data_t::iterator it = mBlacklistData.find(id);
if (it == mBlacklistData.end())
{
@ -145,13 +147,13 @@ void FSAssetBlacklist::removeItemsFromBlacklist(const uuid_vec_t& ids)
bool need_save = false;
LLSD data;
for (uuid_vec_t::const_iterator it = ids.begin(); it != ids.end(); ++it)
for (const auto& id : ids)
{
if (removeItem(*it))
if (removeItem(id))
{
need_save = true;
}
data.append((*it).asString());
data.append(id.asString());
}
if (need_save)

View File

@ -803,6 +803,7 @@ public:
}
else if ((mSourceType == CHAT_SOURCE_AGENT || (mSourceType == CHAT_SOURCE_SYSTEM && mType == CHAT_TYPE_RADAR))
&& !mAvatarID.isNull()
&& chat.mChatStyle != CHAT_STYLE_SERVER_HISTORY
&& chat.mChatStyle != CHAT_STYLE_HISTORY)
{
// ...from a normal user, lookup the name and fill in later.
@ -831,6 +832,7 @@ public:
// [/RLVa:KB]
}
else if (chat.mChatStyle == CHAT_STYLE_HISTORY ||
chat.mChatStyle == CHAT_STYLE_SERVER_HISTORY ||
(mSourceType == CHAT_SOURCE_AGENT || (mSourceType == CHAT_SOURCE_SYSTEM && mType == CHAT_TYPE_RADAR)))
{
//if it's an avatar name with a username add formatting
@ -1506,12 +1508,19 @@ void FSChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
delimiter_style = "BOLD";
}
bool message_from_log = chat.mChatStyle == CHAT_STYLE_HISTORY;
bool message_from_log = (chat.mChatStyle == CHAT_STYLE_HISTORY || chat.mChatStyle == CHAT_STYLE_SERVER_HISTORY);
bool teleport_separator = chat.mSourceType == CHAT_SOURCE_TELEPORT;
// We graying out chat history by graying out messages that contains full date in a time string
if (message_from_log && !is_conversation_log)
{
txt_color = LLUIColorTable::instance().getColor("ChatHistoryMessageFromLog");
if (chat.mChatStyle == CHAT_STYLE_HISTORY)
{
txt_color = LLUIColorTable::instance().getColor("ChatHistoryMessageFromLog");
}
else if (chat.mChatStyle == CHAT_STYLE_SERVER_HISTORY)
{
txt_color = LLUIColorTable::instance().getColor("ChatHistoryMessageFromServerLog");
}
body_message_params.color(txt_color);
body_message_params.readonly_color(txt_color);
name_params.color(txt_color);

View File

@ -100,6 +100,8 @@ std::string FSFloaterAssetBlacklist::getTypeString(S32 type)
return getString("asset_sound");
case LLAssetType::AT_OBJECT:
return getString("asset_object");
case LLAssetType::AT_ANIMATION:
return getString("asset_animation");
case LLAssetType::AT_PERSON:
return getString("asset_resident");
default:

View File

@ -80,9 +80,9 @@
#include <boost/regex.hpp> // <FS:Zi> FIRE-24133 - Redirect chat channel messages
const F32 ME_TYPING_TIMEOUT = 4.0f;
const F32 OTHER_TYPING_TIMEOUT = 9.0f;
const F32 NAME_REFRESH_TIMEOUT = 300.0f;
constexpr F32 ME_TYPING_TIMEOUT = 4.0f;
constexpr F32 OTHER_TYPING_TIMEOUT = 9.0f;
constexpr F32 NAME_REFRESH_TIMEOUT = 300.0f;
floater_showed_signal_t FSFloaterIM::sIMFloaterShowedSignal;
@ -191,7 +191,7 @@ BOOL FSFloaterIM::focusFirstItem(BOOL prefer_text_fields, BOOL focus_flash)
{
mInputEditor->setFocus(TRUE);
onTabInto();
if(focus_flash)
if (focus_flash)
{
gFocusMgr.triggerFocusFlash();
}
@ -201,7 +201,7 @@ BOOL FSFloaterIM::focusFirstItem(BOOL prefer_text_fields, BOOL focus_flash)
void FSFloaterIM::onFocusLost()
{
LLIMModel::getInstance()->resetActiveSessionID();
LLChicletBar::getInstance()->getChicletPanel()->setChicletToggleState(mSessionID, false);
}
@ -229,8 +229,8 @@ void FSFloaterIM::onClose(bool app_quitting)
//
// Last change:
// EXT-3516 X Button should end IM session, _ button should hide
// AO: Make sure observers are removed on close
mVoiceChannelStateChangeConnection.disconnect();
if(LLVoiceClient::instanceExists())
@ -249,7 +249,7 @@ void FSFloaterIM::onSnooze()
{
LLIMModel::LLIMSession* session = LLIMModel::instance().findIMSession(mSessionID);
if (session == NULL)
if (!session)
{
LL_WARNS("FSFloaterIM") << "Empty session." << LL_ENDL;
return;
@ -260,7 +260,7 @@ void FSFloaterIM::onSnooze()
LLVoiceChannel* voice_channel = LLIMModel::getInstance()->getVoiceChannel(mSessionID);
if (is_call_with_chat && voice_channel != NULL && voice_channel->isActive())
if (is_call_with_chat && voice_channel && voice_channel->isActive())
{
LLSD payload;
payload["session_id"] = mSessionID;
@ -288,8 +288,7 @@ void FSFloaterIM::confirmSnooze()
void FSFloaterIM::snoozeDurationCallback(const LLSD& notification, const LLSD& response)
{
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
if (0 == option)
if (S32 option = LLNotificationsUtil::getSelectedOption(notification, response); 0 == option)
{
std::istringstream duration_str(response["duration"].asString());
S32 duration(-1);
@ -328,7 +327,8 @@ void FSFloaterIM::newIMCallback(const LLSD& data){
LLUUID session_id = data["session_id"].asUUID();
FSFloaterIM* floater = LLFloaterReg::findTypedInstance<FSFloaterIM>("fs_impanel", session_id);
if (floater == NULL) return;
if (!floater)
return;
// update if visible or max pending messages exceeded, otherwise will be updated when opened
static LLCachedControl<S32> fsMaxPendingIMMessages(gSavedSettings, "FSMaxPendingIMMessages");
@ -373,9 +373,9 @@ void FSFloaterIM::sendMsgFromInputEditor(EChatType type)
LLWString text = mInputEditor->getWText();
LLWStringUtil::trim(text);
LLWStringUtil::replaceChar(text,182,'\n'); // Convert paragraph symbols back into newlines.
if(!text.empty())
if (!text.empty())
{
if(type == CHAT_TYPE_OOC)
if (type == CHAT_TYPE_OOC)
{
std::string tempText = wstring_to_utf8str( text );
tempText = gSavedSettings.getString("FSOOCPrefix") + " " + tempText + " " + gSavedSettings.getString("FSOOCPostfix");
@ -420,20 +420,20 @@ void FSFloaterIM::sendMsgFromInputEditor(EChatType type)
skin_indicator = skin_indicator.substr(0, 1); // "FS 4.4.1f os", "FS 4.4.1v", "FS 4.4.1a", "FS 4.4.1s os", "FS 4.4.1m os" etc.
}
// </FS:PP>
//Address size check
#if ADDRESS_SIZE == 32
std::string str_address_size_tag = "32";
#else
std::string str_address_size_tag = "";
#endif
//OpenSim check
std::string str_opensim_tag;
#ifdef OPENSIM
str_opensim_tag = " os";
#endif
//Operating System check
#if LL_WINDOWS
std::string str_operating_system_tag = "W";
@ -442,31 +442,29 @@ void FSFloaterIM::sendMsgFromInputEditor(EChatType type)
#elif LL_DARWIN
std::string str_operating_system_tag = "M";
#endif
//RLV check
std::string str_rlv_enabled = "";
if(RlvHandler::isEnabled())
if (RlvHandler::isEnabled())
str_rlv_enabled = "*";
// Text mode check
std::string str_viewer_mode = "";
// Unfortunately, we have to cheat a little here. Ideally we'd have
// a method defined to check if the viewer is running in Text Mode.
// For now, we will use the same method as used in llappviewer.cpp(LLAppViewer::getViewerInfo())
static LLCachedControl<std::string> FSViewerMode(gSavedSettings, "SessionSettingsFile");
std::string viewer_mode(FSViewerMode);
LLStringUtil::toLower(viewer_mode);
if(viewer_mode == "settings_text.xml")
if (viewer_mode == "settings_text.xml")
str_viewer_mode = "T";
//Build it up
size_t insert_pos = is_irc_me_prefix(utf8_text) ? 4 : 0;
//For testing/beta groups, we display the build version since it doesn't speed by and this might change often
if(FSData::getInstance()->isTestingGroup(mSessionID))
if (FSData::getInstance()->isTestingGroup(mSessionID))
{
if(chat_prefix_testing)
utf8_text.insert(insert_pos, ("(" + str_address_size_tag + str_operating_system_tag + " " + LLVersionInfo::getInstance()->getBuildVersion() + skin_indicator + str_viewer_mode + str_rlv_enabled + str_opensim_tag + ") "));
@ -478,7 +476,7 @@ void FSFloaterIM::sendMsgFromInputEditor(EChatType type)
utf8_text.insert(insert_pos, ("(" + str_address_size_tag + str_operating_system_tag + " " + LLVersionInfo::getInstance()->getShortVersion() + skin_indicator + str_viewer_mode + str_rlv_enabled + str_opensim_tag + ") "));
}
}
// <FS:Techwolf Lupindo> Allow user to send system info.
if (mDialog == IM_NOTHING_SPECIAL && utf8_text.find("/sysinfo") == 0)
{
@ -486,9 +484,9 @@ void FSFloaterIM::sendMsgFromInputEditor(EChatType type)
utf8_text = system_info["Part1"].asString() + system_info["Part2"].asString();
}
// </FS:Techwolf Lupindo>
sendMsg(utf8_text);
mInputEditor->setText(LLStringUtil::null);
}
}
@ -514,12 +512,12 @@ void FSFloaterIM::sendMsg(const std::string& msg)
//std::string utf8_text = utf8str_truncate(msg, MAX_MSG_BUF_SIZE - 1);
std::string utf8_text = msg;
// </FS:CR>
if ( (RlvActions::hasBehaviour(RLV_BHVR_SENDIM)) || (RlvActions::hasBehaviour(RLV_BHVR_SENDIMTO)) )
{
const LLIMModel::LLIMSession* pIMSession = LLIMModel::instance().findIMSession(mSessionID);
RLV_ASSERT(pIMSession);
bool fRlvFilter = !pIMSession;
if (pIMSession)
{
@ -538,13 +536,11 @@ void FSFloaterIM::sendMsg(const std::string& msg)
fRlvFilter = true;
break;
}
LLSpeakerMgr::speaker_list_t speakers;
pIMSession->mSpeakers->getSpeakerList(&speakers, TRUE);
for (LLSpeakerMgr::speaker_list_t::const_iterator itSpeaker = speakers.begin();
itSpeaker != speakers.end(); ++itSpeaker)
for (const auto& pSpeaker : speakers)
{
const LLSpeaker* pSpeaker = *itSpeaker;
if ( (gAgent.getID() != pSpeaker->mID) && (!RlvActions::canSendIM(pSpeaker->mID)) )
{
fRlvFilter = true;
@ -558,14 +554,14 @@ void FSFloaterIM::sendMsg(const std::string& msg)
break;
}
}
if (fRlvFilter)
{
utf8_text = RlvStrings::getString(RlvStringKeys::Blocked::SendIm);
}
}
// [/RLVa:KB]
if (mSessionInitialized)
{
LLIMModel::sendMessage(utf8_text, mSessionID, mOtherParticipantUUID, mDialog);
@ -575,7 +571,7 @@ void FSFloaterIM::sendMsg(const std::string& msg)
//queue up the message to send once the session is initialized
mQueuedMsgsForInit.append(utf8_text);
}
updateMessages();
}
@ -587,17 +583,17 @@ FSFloaterIM::~FSFloaterIM()
LLTransientFloaterMgr::getInstance()->removeControlView(LLTransientFloaterMgr::IM, (LLView*)this);
mVoiceChannelStateChangeConnection.disconnect();
if(LLVoiceClient::instanceExists())
if (LLVoiceClient::instanceExists())
{
LLVoiceClient::getInstance()->removeObserver((LLVoiceClientStatusObserver*)this);
}
LLIMModel::LLIMSession* pIMSession = LLIMModel::instance().findIMSession(mSessionID);
if ((pIMSession) && (pIMSession->mSessionType == LLIMModel::LLIMSession::P2P_SESSION))
{
LLAvatarTracker::instance().removeParticularFriendObserver(mOtherParticipantUUID, this);
}
// Clean up any stray name cache connections
if (mAvatarNameCacheConnection.connected())
{
@ -754,7 +750,7 @@ void FSFloaterIM::onChange(EStatusType status, const std::string &channelURI, bo
{
return;
}
updateCallButton();
}
@ -763,13 +759,13 @@ void FSFloaterIM::updateCallButton()
// hide/show call button
bool voice_enabled = LLVoiceClient::getInstance()->voiceEnabled() && LLVoiceClient::getInstance()->isVoiceWorking();
LLIMModel::LLIMSession* session = LLIMModel::instance().findIMSession(mSessionID);
if (!session)
{
getChild<LLButton>("call_btn")->setEnabled(FALSE);
return;
}
bool session_initialized = session->mSessionInitialized;
bool callback_enabled = session->mCallBackEnabled;
@ -792,7 +788,7 @@ void FSFloaterIM::updateButtons(bool is_call_started)
void FSFloaterIM::changed(U32 mask)
{
LL_DEBUGS("FSFloaterIM") << "FSFloaterIM::changed(U32 mask)" << LL_ENDL;
if(LLAvatarActions::isFriend(mOtherParticipantUUID))
{
bool is_online = LLAvatarTracker::instance().isBuddyOnline(mOtherParticipantUUID);
@ -840,7 +836,7 @@ BOOL FSFloaterIM::postBuild()
// support sysinfo button -Zi
mSysinfoButton = getChild<LLButton>("send_sysinfo_btn");
onSysinfoButtonVisibilityChanged(FALSE);
// type-specfic controls
LLIMModel::LLIMSession* pIMSession = LLIMModel::instance().findIMSession(mSessionID);
if (pIMSession)
@ -858,11 +854,11 @@ BOOL FSFloaterIM::postBuild()
LL_DEBUGS("FSFloaterIM") << "adding FSFloaterIM removing/adding particularfriendobserver" << LL_ENDL;
LLAvatarTracker::instance().removeParticularFriendObserver(mOtherParticipantUUID, this);
LLAvatarTracker::instance().addParticularFriendObserver(mOtherParticipantUUID, this);
// Disable "Add friend" button for friends.
LL_DEBUGS("FSFloaterIM") << "add_friend_btn check start" << LL_ENDL;
getChild<LLButton>("add_friend_btn")->setEnabled(!LLAvatarActions::isFriend(mOtherParticipantUUID));
// Disable "Teleport" button if friend is offline
if(LLAvatarActions::isFriend(mOtherParticipantUUID))
{
@ -930,7 +926,7 @@ BOOL FSFloaterIM::postBuild()
LLVoiceClient::getInstance()->addObserver((LLVoiceClientStatusObserver*)this);
// </AO>
mInputEditor = getChild<LLChatEntry>("chat_editor");
mChatHistory = getChild<FSChatHistory>("chat_history");
mChatLayoutPanel = getChild<LLLayoutPanel>("chat_layout_panel");
@ -974,7 +970,7 @@ BOOL FSFloaterIM::postBuild()
{
// if not, give the user a choice, whether to enable the version prefix or not
LLSD args;
LLNotificationsUtil::add("FirstJoinSupportGroup2", args, LLSD(),boost::bind(&FSFloaterIM::enableViewerVersionCallback, this, _1, _2));
LLNotificationsUtil::add("FirstJoinSupportGroup2", args, LLSD(), boost::bind(&FSFloaterIM::enableViewerVersionCallback, this, _1, _2));
}
}
// </FS:Zi> Viewer version popup
@ -1006,7 +1002,7 @@ BOOL FSFloaterIM::postBuild()
std::string session_name(LLIMModel::instance().getName(mSessionID));
updateSessionName(session_name, session_name);
}
//*TODO if session is not initialized yet, add some sort of a warning message like "starting session...blablabla"
//see LLFloaterIMPanel for how it is done (IB)
@ -1174,7 +1170,8 @@ FSFloaterIM* FSFloaterIM::show(const LLUUID& session_id)
{
closeHiddenIMToasts();
if (!gIMMgr->hasSession(session_id)) return NULL;
if (!gIMMgr->hasSession(session_id))
return nullptr;
if (!isChatMultiTab())
{
@ -1196,7 +1193,7 @@ FSFloaterIM* FSFloaterIM::show(const LLUUID& session_id)
FSFloaterIM* floater = getInstance(session_id);
if (!floater)
{
return NULL;
return nullptr;
}
if (isChatMultiTab())
@ -1271,7 +1268,7 @@ void FSFloaterIM::setDocked(bool docked, bool pop_on_undock)
LLNotificationsUI::LLScreenChannel* channel = static_cast<LLNotificationsUI::LLScreenChannel*>
(LLNotificationsUI::LLChannelManager::getInstance()->
findChannelByID(LLUUID(gSavedSettings.getString("NotificationChannelUUID"))));
if(!isChatMultiTab())
{
LLTransientDockableFloater::setDocked(docked, pop_on_undock);
@ -1293,7 +1290,7 @@ void FSFloaterIM::setVisible(BOOL visible)
LLTransientDockableFloater::setVisible(visible);
// update notification channel state
if(channel)
if (channel)
{
channel->updateShowToastsState();
channel->redrawToasts();
@ -1318,10 +1315,9 @@ void FSFloaterIM::setVisible(BOOL visible)
}
}
if(!visible)
if (!visible)
{
LLIMChiclet* chiclet = LLChicletBar::getInstance()->getChicletPanel()->findChiclet<LLIMChiclet>(mSessionID);
if(chiclet)
if (LLIMChiclet* chiclet = LLChicletBar::getInstance()->getChicletPanel()->findChiclet<LLIMChiclet>(mSessionID); chiclet)
{
chiclet->setToggleState(false);
}
@ -1347,7 +1343,7 @@ void FSFloaterIM::setMinimized(BOOL b)
BOOL FSFloaterIM::getVisible()
{
if(isChatMultiTab())
if (isChatMultiTab())
{
FSFloaterIMContainer* im_container = FSFloaterIMContainer::getInstance();
@ -1372,7 +1368,7 @@ BOOL FSFloaterIM::getVisible()
//static
bool FSFloaterIM::toggle(const LLUUID& session_id)
{
if(!isChatMultiTab())
if (!isChatMultiTab())
{
FSFloaterIM* floater = LLFloaterReg::findTypedInstance<FSFloaterIM>("fs_impanel", session_id);
if (floater && floater->getVisible() && floater->hasFocus())
@ -1382,7 +1378,7 @@ bool FSFloaterIM::toggle(const LLUUID& session_id)
floater->setVisible(false);
return false;
}
else if(floater && (!floater->isDocked() || (floater->getVisible() && !floater->hasFocus())))
else if (floater && (!floater->isDocked() || (floater->getVisible() && !floater->hasFocus())))
{
floater->setVisible(TRUE);
floater->setFocus(TRUE);
@ -1419,8 +1415,7 @@ void FSFloaterIM::sessionInitReplyReceived(const LLUUID& im_session_id)
}
// updating "Call" button from group/ad-hoc control panel here to enable it without placing into draw() (EXT-4796)
LLIMModel::LLIMSession* session = LLIMModel::instance().findIMSession(im_session_id);
if (session)
if (LLIMModel::LLIMSession* session = LLIMModel::instance().findIMSession(im_session_id); session)
{
if ((session->isGroupSessionType() && gAgent.isInGroup(im_session_id)) || session->isAdHocSessionType())
{
@ -1430,7 +1425,6 @@ void FSFloaterIM::sessionInitReplyReceived(const LLUUID& im_session_id)
//*TODO here we should remove "starting session..." warning message if we added it in postBuild() (IB)
//need to send delayed messaged collected while waiting for session initialization
if (mQueuedMsgsForInit.size())
{
@ -1451,7 +1445,6 @@ void FSFloaterIM::updateMessages()
//<FS:HG> FS-1734 seperate name and text styles for moderator
bool highlight_mods_chat = gSavedSettings.getBOOL("FSHighlightGroupMods");
std::list<LLSD> messages;
// we shouldn't reset unread message counters if IM floater doesn't have focus
@ -1480,7 +1473,7 @@ void FSFloaterIM::updateMessages()
LLUUID from_id = msg["from_id"].asUUID();
std::string from = msg["from"].asString();
std::string message = msg["message"].asString();
bool is_history = msg["is_history"].asBoolean();
S32 is_history = msg["is_history"].asInteger();
bool is_region_msg = msg["is_region_msg"].asBoolean();
LLChat chat;
@ -1488,7 +1481,10 @@ void FSFloaterIM::updateMessages()
chat.mSessionID = mSessionID;
chat.mFromName = from;
chat.mTimeStr = time;
chat.mChatStyle = is_history ? CHAT_STYLE_HISTORY : chat.mChatStyle;
if (is_history)
{
chat.mChatStyle = (EChatStyle) is_history;
}
if (is_region_msg)
{
chat.mSourceType = CHAT_SOURCE_REGION;
@ -1534,7 +1530,7 @@ void FSFloaterIM::updateMessages()
{
chat.mText = message;
}
mChatHistory->appendMessage(chat, chat_args);
mLastMessageIndex = msg["index"].asInteger();
@ -1593,8 +1589,7 @@ void FSFloaterIM::onInputEditorFocusLost()
void FSFloaterIM::onInputEditorKeystroke()
{
std::string text = mInputEditor->getText();
if (!text.empty())
if (!mInputEditor->getText().empty())
{
setTyping(true);
}
@ -1607,13 +1602,13 @@ void FSFloaterIM::onInputEditorKeystroke()
void FSFloaterIM::setTyping(bool typing)
{
if ( typing )
if (typing)
{
// Started or proceeded typing, reset the typing timeout timer
mTypingTimeoutTimer.reset();
}
if ( mMeTyping != typing )
if (mMeTyping != typing)
{
// Typing state is changed
mMeTyping = typing;
@ -1630,7 +1625,7 @@ void FSFloaterIM::setTyping(bool typing)
if ( mShouldSendTypingState && mDialog == IM_NOTHING_SPECIAL && !(FSData::instance().isSupport(mOtherParticipantUUID) && FSData::instance().isAgentFlag(gAgentID, FSData::NO_SUPPORT)))
// </FS:Techwolf Lupindo>
{
if ( mMeTyping )
if (mMeTyping)
{
if ( mTypingTimer.getElapsedTimeF32() > 1.f )
{
@ -1651,12 +1646,11 @@ void FSFloaterIM::setTyping(bool typing)
LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(mSessionID);
if (speaker_mgr)
speaker_mgr->setSpeakerTyping(gAgent.getID(), FALSE);
}
void FSFloaterIM::processIMTyping(const LLUUID& from_id, BOOL typing)
{
if ( typing )
if (typing)
{
// other user started typing
addTypingIndicator(from_id);
@ -1678,7 +1672,7 @@ void FSFloaterIM::processAgentListUpdates(const LLSD& body)
if (body.isMap() && body.has("agent_updates") && body["agent_updates"].isMap())
{
LLSD::map_const_iterator update_it;
for(update_it = body["agent_updates"].beginMap();
for (update_it = body["agent_updates"].beginMap();
update_it != body["agent_updates"].endMap();
++update_it)
{
@ -1721,7 +1715,7 @@ void FSFloaterIM::processAgentListUpdates(const LLSD& body)
joined_uuids.begin(), joined_uuids.end(),
std::back_inserter(intersection));
if (intersection.size() > 0)
if (!intersection.empty())
{
sendParticipantsAddedNotification(intersection);
}
@ -1773,30 +1767,6 @@ void FSFloaterIM::processChatHistoryStyleUpdate(const LLSD& newvalue)
}
}
void FSFloaterIM::processSessionUpdate(const LLSD& session_update)
{
// *TODO : verify following code when moderated mode will be implemented
if ( false && session_update.has("moderated_mode") &&
session_update["moderated_mode"].has("voice") )
{
BOOL voice_moderated = session_update["moderated_mode"]["voice"];
const std::string session_label = LLIMModel::instance().getName(mSessionID);
if (voice_moderated)
{
setTitle(session_label + std::string(" ") + LLTrans::getString("IM_moderated_chat_label"));
}
else
{
setTitle(session_label);
}
// *TODO : uncomment this when/if LLPanelActiveSpeakers panel will be added
//update the speakers dropdown too
//mSpeakerPanel->setVoiceModerationCtrlMode(voice_moderated);
}
}
BOOL FSFloaterIM::handleDragAndDrop(S32 x, S32 y, MASK mask,
BOOL drop, EDragAndDropType cargo_type,
void *cargo_data, EAcceptance *accept,
@ -1846,7 +1816,7 @@ BOOL FSFloaterIM::handleDragAndDrop(S32 x, S32 y, MASK mask,
bool FSFloaterIM::dropCallingCard(LLInventoryItem* item, bool drop)
{
bool rv = true;
if(item && item->getCreatorUUID().notNull())
if (item && item->getCreatorUUID().notNull())
{
uuid_vec_t ids;
ids.push_back(item->getCreatorUUID());
@ -1874,7 +1844,7 @@ bool FSFloaterIM::dropCallingCard(LLInventoryItem* item, bool drop)
bool FSFloaterIM::dropCategory(LLInventoryCategory* category, bool drop)
{
bool rv = true;
if(category)
if (category)
{
LLInventoryModel::cat_array_t cats;
LLInventoryModel::item_array_t items;
@ -1885,7 +1855,7 @@ bool FSFloaterIM::dropCategory(LLInventoryCategory* category, bool drop)
LLInventoryModel::EXCLUDE_TRASH,
buddies);
S32 count = items.size();
if(count == 0)
if (count == 0)
{
rv = false;
}
@ -1918,13 +1888,13 @@ bool FSFloaterIM::dropCategory(LLInventoryCategory* category, bool drop)
bool FSFloaterIM::dropPerson(LLUUID* person_id, bool drop)
{
bool res = person_id && person_id->notNull();
if(res)
if (res)
{
uuid_vec_t ids;
ids.push_back(*person_id);
res = canAddSelectedToChat(ids);
if(res && drop)
if (res && drop)
{
// these people will be added during the next draw() call
// (so they can be added all at once)
@ -2064,7 +2034,7 @@ void FSFloaterIM::addTypingIndicator(const LLUUID& from_id)
void FSFloaterIM::removeTypingIndicator(const LLUUID& from_id)
{
if ( mOtherTyping )
if (mOtherTyping)
{
mOtherTyping = false;
@ -2109,7 +2079,7 @@ void FSFloaterIM::closeHiddenIMToasts()
};
LLNotificationsUI::LLScreenChannel* channel = LLNotificationsUI::LLChannelManager::getNotificationScreenChannel();
if (channel != NULL)
if (channel)
{
channel->closeHiddenToasts(IMToastMatcher());
}
@ -2123,7 +2093,7 @@ void FSFloaterIM::confirmLeaveCallCallback(const LLSD& notification, const LLSD&
bool snooze = payload["snooze"].asBoolean();
FSFloaterIM* im_floater = LLFloaterReg::findTypedInstance<FSFloaterIM>("fs_impanel", session_id);
if (option == 0 && im_floater != NULL)
if (option == 0 && im_floater)
{
LLIMModel::LLIMSession* session = LLIMModel::instance().findIMSession(session_id);
if (session)
@ -2162,15 +2132,19 @@ void FSFloaterIM::initIMFloater()
void FSFloaterIM::sRemoveTypingIndicator(const LLSD& data)
{
LLUUID session_id = data["session_id"];
if (session_id.isNull()) return;
if (session_id.isNull())
return;
LLUUID from_id = data["from_id"];
if (gAgentID == from_id || LLUUID::null == from_id) return;
if (gAgentID == from_id || LLUUID::null == from_id)
return;
FSFloaterIM* floater = FSFloaterIM::findInstance(session_id);
if (!floater) return;
if (!floater)
return;
if (IM_NOTHING_SPECIAL != floater->mDialog) return;
if (IM_NOTHING_SPECIAL != floater->mDialog)
return;
floater->removeTypingIndicator();
}
@ -2194,7 +2168,7 @@ void FSFloaterIM::onClickCloseBtn(bool app_quitting)
LLIMModel::LLIMSession* session = LLIMModel::instance().findIMSession(
mSessionID);
if (session == NULL)
if (!session)
{
LL_WARNS("FSFloaterIM") << "Empty session." << LL_ENDL;
return;
@ -2222,16 +2196,16 @@ void FSFloaterIM::onClickCloseBtn(bool app_quitting)
// <FS:Zi> Viewer version popup
BOOL FSFloaterIM::enableViewerVersionCallback(const LLSD& notification,const LLSD& response)
{
S32 option=LLNotificationsUtil::getSelectedOption(notification,response);
S32 option = LLNotificationsUtil::getSelectedOption(notification,response);
BOOL result=FALSE;
if(option==0) // "yes"
BOOL result = FALSE;
if (option == 0) // "yes"
{
result=TRUE;
result = TRUE;
}
gSavedSettings.setBOOL("FSSupportGroupChatPrefix3",result);
gSavedSettings.setBOOL("FSSupportGroupChatPrefixTesting",result);
gSavedSettings.setBOOL("FSSupportGroupChatPrefix3", result);
gSavedSettings.setBOOL("FSSupportGroupChatPrefixTesting", result);
return result;
}
// </FS:Zi>
@ -2331,45 +2305,14 @@ bool FSFloaterIM::canAddSelectedToChat(const uuid_vec_t& uuids)
{
// For a P2P session just check if we are not adding the other participant.
for (uuid_vec_t::const_iterator id = uuids.begin();
id != uuids.end(); ++id)
for (const auto& uuid : uuids)
{
if (*id == mOtherParticipantUUID)
if (uuid == mOtherParticipantUUID)
{
return false;
}
}
}
else
{
// For a conference session we need to check against the list from LLSpeakerMgr,
// because this list may change when participants join or leave the session.
// Ansariel: Disabled the check because the sim doesn't clear somebody off the
// speaker list if they crash or relog and they can't be re-added in that case.
/*
LLSpeakerMgr::speaker_list_t speaker_list;
LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(mSessionID);
if (speaker_mgr)
{
speaker_mgr->getSpeakerList(&speaker_list, true);
}
for (uuid_vec_t::const_iterator id = uuids.begin();
id != uuids.end(); ++id)
{
for (LLSpeakerMgr::speaker_list_t::const_iterator it = speaker_list.begin();
it != speaker_list.end(); ++it)
{
const LLPointer<LLSpeaker>& speaker = *it;
if (*id == speaker->mID)
{
return false;
}
}
}
*/
}
return true;
}
@ -2386,7 +2329,7 @@ void FSFloaterIM::addSessionParticipants(const uuid_vec_t& uuids)
}
else
{
if(findInstance(mSessionID))
if (findInstance(mSessionID))
{
// remember whom we have invited, to notify others later, when the invited ones actually join
mInvitedParticipants.insert(mInvitedParticipants.end(), uuids.begin(), uuids.end());
@ -2407,7 +2350,7 @@ void FSFloaterIM::addP2PSessionParticipants(const LLSD& notification, const LLSD
LLVoiceChannel* voice_channel = LLIMModel::getInstance()->getVoiceChannel(mSessionID);
// first check whether this is a voice session
bool is_voice_call = voice_channel != NULL && voice_channel->isActive();
bool is_voice_call = voice_channel && voice_channel->isActive();
uuid_vec_t temp_ids;
uuid_vec_t invited_ids;
@ -2419,12 +2362,11 @@ void FSFloaterIM::addP2PSessionParticipants(const LLSD& notification, const LLSD
LLUUID session_id = mSessionID;
// then we can close the current session
if(findInstance(mSessionID))
if (findInstance(mSessionID))
{
// remember whom we have invited, to notify others later, when the invited ones actually join
mInvitedParticipants.insert(mInvitedParticipants.end(), uuids.begin(), uuids.end());
invited_ids.insert(invited_ids.end(), mInvitedParticipants.begin(), mInvitedParticipants.end());
std::copy(uuids.begin(), uuids.end(), std::back_inserter(mInvitedParticipants));
std::copy(mInvitedParticipants.begin(), mInvitedParticipants.end(), std::back_inserter(invited_ids));
// Ansariel: This will result in the floater actually being closed as opposed in CHUI!
onClose(false);

View File

@ -113,7 +113,6 @@ public:
void onVisibilityChange(BOOL new_visibility);
void processIMTyping(const LLUUID& from_id, BOOL typing);
void processAgentListUpdates(const LLSD& body);
void processSessionUpdate(const LLSD& session_update);
void updateChatHistoryStyle();
static void processChatHistoryStyleUpdate(const LLSD& newvalue);
@ -173,7 +172,6 @@ protected:
// support sysinfo button -Zi
BOOL enableViewerVersionCallback(const LLSD& notification,const LLSD& response); // <FS:Zi> Viewer version popup
void reshapeFloater(bool collapse);
void reshapeChatLayoutPanel();
private:
// process focus events to set a currently active session
@ -254,7 +252,6 @@ private:
LLLayoutStack* mInputPanels;
LLLayoutPanel* mUnreadMessagesNotificationPanel;
LLTextBox* mUnreadMessagesNotificationTextBox;
// bool mPositioned; // dead code -Zi
std::string mSavedTitle;
LLUIString mTypingStart;

View File

@ -40,14 +40,14 @@
#include "lltoolbarview.h"
#include "llvoiceclient.h"
static const F32 VOICE_STATUS_UPDATE_INTERVAL = 1.0f;
constexpr F32 VOICE_STATUS_UPDATE_INTERVAL = 1.0f;
//
// FSFloaterIMContainer
//
FSFloaterIMContainer::FSFloaterIMContainer(const LLSD& seed)
: LLMultiFloater(seed),
mActiveVoiceFloater(NULL),
mActiveVoiceFloater(nullptr),
mCurrentVoiceState(VOICE_STATE_NONE),
mForceVoiceStateUpdate(false),
mIsAddingNewSession(false)
@ -186,7 +186,8 @@ void FSFloaterIMContainer::addFloater(LLFloater* floaterp,
BOOL select_added_floater,
LLTabContainer::eInsertionPoint insertion_point)
{
if(!floaterp) return;
if (!floaterp)
return;
// already here
if (floaterp->getHost() == this)
@ -385,14 +386,12 @@ void FSFloaterIMContainer::setMinimized(BOOL b)
{
if (mTabContainer)
{
FSFloaterNearbyChat* nearby_floater = dynamic_cast<FSFloaterNearbyChat*>(mTabContainer->getCurrentPanel());
if (nearby_floater)
if (FSFloaterNearbyChat* nearby_floater = dynamic_cast<FSFloaterNearbyChat*>(mTabContainer->getCurrentPanel()); nearby_floater)
{
nearby_floater->handleMinimized(b);
}
FSFloaterIM* im_floater = dynamic_cast<FSFloaterIM*>(mTabContainer->getCurrentPanel());
if (im_floater)
if (FSFloaterIM* im_floater = dynamic_cast<FSFloaterIM*>(mTabContainer->getCurrentPanel()); im_floater)
{
im_floater->handleMinimized(b);
}
@ -405,7 +404,8 @@ void FSFloaterIMContainer::setMinimized(BOOL b)
void FSFloaterIMContainer::sessionAdded(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id, BOOL has_offline_msg)
{
LLIMModel::LLIMSession* session = LLIMModel::getInstance()->findIMSession(session_id);
if (!session) return;
if (!session)
return;
FSFloaterIM::onNewIMReceived(session_id);
}
@ -413,8 +413,7 @@ void FSFloaterIMContainer::sessionAdded(const LLUUID& session_id, const std::str
//virtual
void FSFloaterIMContainer::sessionRemoved(const LLUUID& session_id)
{
FSFloaterIM* iMfloater = LLFloaterReg::findTypedInstance<FSFloaterIM>("fs_impanel", session_id);
if (iMfloater != NULL)
if (FSFloaterIM* iMfloater = LLFloaterReg::findTypedInstance<FSFloaterIM>("fs_impanel", session_id); iMfloater)
{
iMfloater->closeFloater();
}
@ -535,7 +534,7 @@ LLFloater* FSFloaterIMContainer::getCurrentVoiceFloater()
{
if (!LLVoiceClient::instance().voiceEnabled())
{
return NULL;
return nullptr;
}
if (LLVoiceChannelProximal::getInstance() == LLVoiceChannel::getCurrentVoiceChannel())
@ -551,7 +550,7 @@ LLFloater* FSFloaterIMContainer::getCurrentVoiceFloater()
return im_floater;
}
}
return NULL;
return nullptr;
}
void FSFloaterIMContainer::addFlashingSession(const LLUUID& session_id)
@ -573,8 +572,7 @@ void FSFloaterIMContainer::checkFlashing()
void FSFloaterIMContainer::sessionIDUpdated(const LLUUID& old_session_id, const LLUUID& new_session_id)
{
avatarID_panel_map_t::iterator found = mSessions.find(old_session_id);
if (found != mSessions.end())
if (avatarID_panel_map_t::iterator found = mSessions.find(old_session_id); found != mSessions.end())
{
LLFloater* floaterp = found->second;
mSessions.erase(found);

View File

@ -51,17 +51,16 @@ void FSLSLBridgeRequest_Failure(LLSD const &aData)
void FSLSLBridgeRequestRadarPos_Success(LLSD const &aData)
{
FSRadar* radar = FSRadar::getInstance();
LL_DEBUGS("FSLSLBridge") << ll_pretty_print_sd(aData) << LL_ENDL;
if (radar && aData.has(LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS_CONTENT))
if (aData.has(LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS_CONTENT))
{
std::string strContent = aData[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS_CONTENT].asString();
//LL_INFOS("FSLSLBridge") << "Got info: " << strContent << LL_ENDL;
// AO: parse content into pairs of [agent UUID,agent zHeight] , update our radar for each one
LLUUID targetAv;
F32 targetZ;
typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
boost::char_separator<char> sep(", ");
tokenizer tokens(strContent, sep);
@ -69,9 +68,8 @@ void FSLSLBridgeRequestRadarPos_Success(LLSD const &aData)
{
targetAv = LLUUID(*(tok_iter++));
targetZ = (F32)::atof((*tok_iter).c_str());
FSRadarEntry* entry = radar->getEntry(targetAv);
if (entry)
if (auto entry = FSRadar::getInstance()->getEntry(targetAv); entry)
{
entry->setZOffset(targetZ);
//LL_INFOS("FSLSLBridge") << targetAv << " ::: " << targetZ << LL_ENDL;

View File

@ -60,7 +60,7 @@
#include "rlvactions.h"
#include "rlvhandler.h"
static const F32 FS_RADAR_LIST_UPDATE_INTERVAL = 1.f;
constexpr F32 FS_RADAR_LIST_UPDATE_INTERVAL = 1.f;
/**
* Periodically updates the nearby people list while the Nearby tab is active.
@ -98,7 +98,7 @@ FSRadar::FSRadar() :
mNameFormatCallbackConnection(),
mAgeAlertCallbackConnection()
{
mRadarListUpdater = new FSRadarListUpdater(boost::bind(&FSRadar::updateRadarList, this));
mRadarListUpdater = std::make_unique<FSRadarListUpdater>(std::bind(&FSRadar::updateRadarList, this));
// Use the callback from LLAvatarNameCache here or we might update the names too early!
LLAvatarNameCache::getInstance()->addUseDisplayNamesCallback(boost::bind(&FSRadar::updateNames, this));
@ -110,13 +110,6 @@ FSRadar::FSRadar() :
FSRadar::~FSRadar()
{
delete mRadarListUpdater;
for (const auto& [av_id, entry] : mEntryList)
{
delete entry;
}
if (mShowUsernamesCallbackConnection.connected())
{
mShowUsernamesCallbackConnection.disconnect();
@ -216,14 +209,13 @@ void FSRadar::updateRadarList()
F32 drawRadius(sRenderFarClip);
const LLVector3d& posSelf = gAgent.getPositionGlobal();
LLViewerRegion* own_reg = gAgent.getRegion();
LLUUID regionSelf;
if (own_reg)
if (LLViewerRegion* own_reg = gAgent.getRegion(); own_reg)
{
regionSelf = own_reg->getRegionID();
}
bool alertScripts = mRadarAlertRequest; // save the current value, so it doesn't get changed out from under us by another thread
time_t now = time(NULL);
time_t now = time(nullptr);
//STEP 0: Clear model data
mRadarEnterAlerts.clear();
@ -259,10 +251,8 @@ void FSRadar::updateRadarList()
// Remove old avatars from our list
for (const auto& avid : removed_vec)
{
entry_map_t::iterator found = mEntryList.find(avid);
if (found != mEntryList.end())
if (entry_map_t::iterator found = mEntryList.find(avid); found != mEntryList.end())
{
delete found->second;
mEntryList.erase(found);
}
}
@ -270,18 +260,18 @@ void FSRadar::updateRadarList()
// Add new avatars
for (const auto& avid : added_vec)
{
mEntryList[avid] = new FSRadarEntry(avid);
mEntryList.emplace(avid, std::make_shared<FSRadarEntry>(avid));
}
speakermgr->update(TRUE);
//STEP 2: Transform detected model list data into more flexible multimap data structure;
//TS: Count avatars in chat range and in the same region
U32 inChatRange = 0;
U32 inSameRegion = 0;
U32 inChatRange{ 0 };
U32 inSameRegion{ 0 };
std::vector<LLVector3d>::const_iterator
pos_it = positions.begin(),
pos_end = positions.end();
pos_end = positions.end();
uuid_vec_t::const_iterator
item_it = avatar_ids.begin(),
item_end = avatar_ids.end();
@ -290,7 +280,6 @@ void FSRadar::updateRadarList()
//
//2a. For each detected av, gather up all data we would want to display or use to drive alerts
//
LLUUID avId = static_cast<LLUUID>(*item_it);
LLVector3d avPos = static_cast<LLVector3d>(*pos_it);
@ -300,7 +289,7 @@ void FSRadar::updateRadarList()
}
// Skip modelling this avatar if its basic data is either inaccessible, or it's a dummy placeholder
FSRadarEntry* ent = getEntry(avId);
auto ent = getEntry(avId);
LLViewerRegion* reg = world->getRegionFromPosGlobal(avPos);
if (!ent) // don't update this radar listing if data is inaccessible
{
@ -311,12 +300,9 @@ void FSRadar::updateRadarList()
LLVOAvatar* avVo = (LLVOAvatar*)gObjectList.findObject(avId);
static LLUICachedControl<bool> sFSShowDummyAVsinRadar("FSShowDummyAVsinRadar");
if (!sFSShowDummyAVsinRadar)
if (!sFSShowDummyAVsinRadar && avVo && avVo->mIsDummy)
{
if (avVo && avVo->mIsDummy)
{
continue;
}
continue;
}
bool is_muted = mutelist->isMuted(avId);
@ -654,7 +640,7 @@ void FSRadar::updateRadarList()
if (mRadarOffsetRequests.size() > 0)
{
static const std::string prefix = "getZOffsets|";
std::string msg = "";
std::string msg {};
U32 updatesPerRequest = 0;
while (mRadarOffsetRequests.size() > 0)
{
@ -666,7 +652,7 @@ void FSRadar::updateRadarList()
msg = msg.substr(0, msg.size() - 1);
bridge.viewerToLSL(prefix + msg, FSLSLBridgeRequestRadarPos_Success);
//LL_INFOS() << " OFFSET REQUEST SEGMENT"<< prefix << msg << LL_ENDL;
msg = "";
msg.clear();
updatesPerRequest = 0;
}
}
@ -832,31 +818,27 @@ void FSRadar::updateRadarList()
void FSRadar::requestRadarChannelAlertSync()
{
F32 timeNow = gFrameTimeSeconds;
if ((timeNow - FSRADAR_CHAT_MIN_SPACING) > mRadarLastRequestTime)
if (F32 timeNow = gFrameTimeSeconds; (timeNow - FSRADAR_CHAT_MIN_SPACING) > mRadarLastRequestTime)
{
mRadarLastRequestTime = timeNow;
mRadarAlertRequest = true;
}
}
FSRadarEntry* FSRadar::getEntry(const LLUUID& avatar_id)
std::shared_ptr<FSRadarEntry> FSRadar::getEntry(const LLUUID& avatar_id)
{
entry_map_t::iterator found = mEntryList.find(avatar_id);
if (found == mEntryList.end())
if (entry_map_t::iterator found = mEntryList.find(avatar_id); found != mEntryList.end())
{
return nullptr;
return found->second;
}
return found->second;
return nullptr;
}
void FSRadar::teleportToAvatar(const LLUUID& targetAv)
// Teleports user to last scanned location of nearby avatar
// Note: currently teleportViaLocation is disrupted by enforced landing points set on a parcel.
{
LLWorld* world = LLWorld::getInstance();
FSRadarEntry* entry = getEntry(targetAv);
if (entry)
if (auto entry = getEntry(targetAv); entry)
{
LLVector3d avpos = entry->mGlobalPos;
if (avpos.mdV[VZ] == AVATAR_UNKNOWN_Z_OFFSET)
@ -867,7 +849,7 @@ void FSRadar::teleportToAvatar(const LLUUID& targetAv)
{
// <FS:TS> FIRE-20862: Teleport the configured offset toward the center of the region from the
// avatar's reported position
LLViewerRegion* avreg = world->getRegionFromPosGlobal(avpos);
LLViewerRegion* avreg = LLWorld::getInstance()->getRegionFromPosGlobal(avpos);
if (avreg)
{
LLVector3d region_center = avreg->getCenterGlobal();
@ -964,8 +946,7 @@ void FSRadar::onRadarReportToClicked(const LLSD& userdata)
bool FSRadar::radarReportToCheck(const LLSD& userdata)
{
const std::string menu_item = userdata.asString();
bool report_to = gSavedSettings.getBOOL("FSMilkshakeRadarToasts");
if (report_to)
if (gSavedSettings.getBOOL("FSMilkshakeRadarToasts"))
{
return (menu_item == "radar_toasts");
}
@ -1000,8 +981,7 @@ void FSRadar::checkTracking()
void FSRadar::updateTracking()
{
FSRadarEntry* entry = getEntry(mTrackedAvatarId);
if (entry)
if (auto entry = getEntry(mTrackedAvatarId); entry)
{
if (LLTracker::getTrackedPositionGlobal() != entry->mGlobalPos)
{
@ -1039,8 +1019,7 @@ void FSRadar::updateNames()
void FSRadar::updateName(const LLUUID& avatar_id)
{
FSRadarEntry* entry = getEntry(avatar_id);
if (entry)
if (auto entry = getEntry(avatar_id); entry)
{
entry->updateName();
}
@ -1056,8 +1035,7 @@ void FSRadar::updateAgeAlertCheck()
void FSRadar::updateNotes(const LLUUID& avatar_id, std::string_view notes)
{
FSRadarEntry* entry = getEntry(avatar_id);
if (entry)
if (auto entry = getEntry(avatar_id); entry)
{
entry->setNotes(notes);
}

View File

@ -63,7 +63,7 @@ class FSRadar
virtual ~FSRadar();
public:
typedef boost::unordered_map<const LLUUID, FSRadarEntry*, FSUUIDHash> entry_map_t;
typedef std::unordered_map<const LLUUID, std::shared_ptr<FSRadarEntry>, FSUUIDHash> entry_map_t;
entry_map_t getRadarList() { return mEntryList; }
void startTracking(const LLUUID& avatar_id);
@ -80,13 +80,13 @@ public:
static bool radarReportToCheck(const LLSD& userdata);
void getCurrentData(std::vector<LLSD>& entries, LLSD& stats) const { entries = mRadarEntriesData; stats = mAvatarStats; }
FSRadarEntry* getEntry(const LLUUID& avatar_id);
std::shared_ptr<FSRadarEntry> getEntry(const LLUUID& avatar_id);
// internals
class Updater
{
public:
typedef boost::function<void()> callback_t;
typedef std::function<void()> callback_t;
Updater(callback_t cb)
: mCallback(cb)
{ }
@ -116,7 +116,7 @@ private:
void radarAlertMsg(const LLUUID& agent_id, const LLAvatarName& av_name, std::string_view postMsg);
void updateAgeAlertCheck();
Updater* mRadarListUpdater;
std::unique_ptr<Updater> mRadarListUpdater;
struct RadarFields
{

View File

@ -418,8 +418,7 @@ LLColor4 LGGContactSets::colorize(const LLUUID& uuid, const LLColor4& cur_color,
}
else
{
FSRadarEntry* entry = FSRadar::getInstance()->getEntry(uuid);
if ( (entry && entry->getIsLinden()) || (!entry && FSCommon::isLinden(uuid)) )
if (auto entry = FSRadar::getInstance()->getEntry(uuid); (entry && entry->getIsLinden()) || (!entry && FSCommon::isLinden(uuid)) )
{
switch (type)
{

View File

@ -1919,7 +1919,7 @@ bool LLAvatarActions::canZoomIn(const LLUUID& idAgent)
else
{
// Special case for SL since interest list changes
FSRadarEntry* entry = FSRadar::getInstance()->getEntry(idAgent);
auto entry = FSRadar::getInstance()->getEntry(idAgent);
#ifdef OPENSIM
if (LLGridManager::getInstance()->isInOpenSim())
{
@ -1928,7 +1928,7 @@ bool LLAvatarActions::canZoomIn(const LLUUID& idAgent)
else
#endif
{
return (entry != NULL);
return (entry != nullptr);
}
}
// </FS:Ansariel>
@ -1939,8 +1939,7 @@ void LLAvatarActions::zoomIn(const LLUUID& idAgent)
// <FS:Ansariel> Firestorm radar support
//handle_zoom_to_object(idAgent);
FSRadarEntry* entry = FSRadar::getInstance()->getEntry(idAgent);
if (entry)
if (auto entry = FSRadar::getInstance()->getEntry(idAgent); entry)
{
handle_zoom_to_object(idAgent, entry->getGlobalPos());
}

View File

@ -444,6 +444,7 @@ void inventory_offer_handler(LLOfferInfo* info)
}
report_to_nearby_chat(LLTrans::getString(message_type, chat_args));
make_ui_sound("UISndInventoryOffer");
}
// </FS:Ansariel>

View File

@ -1032,7 +1032,9 @@ void LLIMModel::LLIMSession::addMessage(const std::string& from,
const LLUUID& from_id,
const std::string& utf8_text,
const std::string& time,
const bool is_history, // comes from a history file or chat server
// <FS:Zi> Add a distinct color for server side group chat replay
// const bool is_history, // comes from a history file or chat server
const S32 is_history, // comes from a history file or chat server
const bool is_region_msg,
const U32 timestamp) // may be zero
{
@ -1101,7 +1103,9 @@ void LLIMModel::LLIMSession::addMessagesFromHistoryCache(const chat_message_list
LL_DEBUGS("ChatHistory") << mSessionID << ": Adding history cache message: " << msg << LL_ENDL;
// Add message from history cache to the display
addMessage(from, from_id, msg[LL_IM_TEXT], msg[LL_IM_TIME], true, false, 0); // from history data, not region message, no timestamp
// <FS:Zi> Add a distinct color for server side group chat replay
// addMessage(from, from_id, msg[LL_IM_TEXT], msg[LL_IM_TIME], true, false, 0); // from history data, not region message, no timestamp
addMessage(from, from_id, msg[LL_IM_TEXT], msg[LL_IM_TIME], CHAT_STYLE_HISTORY, false, 0); // from history data, not region message, no timestamp
}
}
@ -1309,7 +1313,9 @@ void LLIMModel::LLIMSession::addMessagesFromServerHistory(const LLSD& history,
message["time"] = chat_time_str;
message["timestamp"] = (S32)history_msg_timestamp;
message["index"] = (LLSD::Integer)mMsgs.size();
message["is_history"] = true;
// <FS:Zi> Add a distinct color for server side group chat replay
// message["is_history"] = true;
message["is_history"] = CHAT_STYLE_SERVER_HISTORY;
mMsgs.push_front(message);
LL_DEBUGS("ChatHistory") << mSessionID << ": push_front() adding group chat history message " << message << LL_ENDL;
@ -1356,12 +1362,16 @@ void LLIMModel::LLIMSession::chatFromLogFile(LLLogChat::ELogLineType type, const
if (type == LLLogChat::LOG_LINE)
{
LL_DEBUGS("ChatHistory") << "chatFromLogFile() adding LOG_LINE message from " << msg << LL_ENDL;
self->addMessage("", LLSD(), msg["message"].asString(), "", true, false, 0); // from history data, not region message, no timestamp
// <FS:Zi> Add a distinct color for server side group chat replay
// self->addMessage("", LLSD(), msg["message"].asString(), "", true, false, 0); // from history data, not region message, no timestamp
self->addMessage("", LLSD(), msg["message"].asString(), "", CHAT_STYLE_HISTORY, false, 0); // from history data, not region message, no timestamp
}
else if (type == LLLogChat::LOG_LLSD)
{
LL_DEBUGS("ChatHistory") << "chatFromLogFile() adding LOG_LLSD message from " << msg << LL_ENDL;
self->addMessage(msg["from"].asString(), msg["from_id"].asUUID(), msg["message"].asString(), msg["time"].asString(), true, false, 0); // from history data, not region message, no timestamp
// <FS:Zi> Add a distinct color for server side group chat replay
// self->addMessage(msg["from"].asString(), msg["from_id"].asUUID(), msg["message"].asString(), msg["time"].asString(), true, false, 0); // from history data, not region message, no timestamp
self->addMessage(msg["from"].asString(), msg["from_id"].asUUID(), msg["message"].asString(), msg["time"].asString(), CHAT_STYLE_HISTORY, false, 0); // from history data, not region message, no timestamp
}
}
@ -1717,7 +1727,9 @@ bool LLIMModel::addToHistory(const LLUUID& session_id,
// <FS:Ansariel> Forward IM to nearby chat if wanted
std::string timestr = LLLogChat::timestamp2LogString(timestamp, false);
session->addMessage(from, from_id, utf8_text, timestr, false, is_region_msg, timestamp); //might want to add date separately
// <FS:Zi> Add a distinct color for server side group chat replay
// session->addMessage(from, from_id, utf8_text, timestr, false, is_region_msg, timestamp); //might want to add date separately
session->addMessage(from, from_id, utf8_text, timestr, CHAT_STYLE_NORMAL, is_region_msg, timestamp); //might want to add date separately
static LLCachedControl<bool> show_im_in_chat(gSavedSettings, "FSShowIMInChatHistory");
if (show_im_in_chat && !is_announcement)
@ -4650,7 +4662,7 @@ public:
{
if ( body.has("session_info") )
{
im_floater->processSessionUpdate(body["session_info"]);
//im_floater->processSessionUpdate(body["session_info"]); // <FS:Ansariel> Method does nothing
// Send request for chat history, if enabled.
if (gSavedPerAccountSettings.getBOOL("FetchGroupChatHistory"))
@ -4747,14 +4759,15 @@ public:
const LLSD& input) const
{
LLUUID session_id = input["body"]["session_id"].asUUID();
// <FS:Ansariel> [FS communication UI]
//LLFloaterIMSession* im_floater = LLFloaterIMSession::findInstance(session_id);
FSFloaterIM* im_floater = FSFloaterIM::findInstance(session_id);
// </FS:Ansariel> [FS communication UI]
if ( im_floater )
{
im_floater->processSessionUpdate(input["body"]["info"]);
}
// <FS:Ansariel> Method does nothing
//// <FS:Ansariel> [FS communication UI]
////LLFloaterIMSession* im_floater = LLFloaterIMSession::findInstance(session_id);
//FSFloaterIM* im_floater = FSFloaterIM::findInstance(session_id);
//// </FS:Ansariel> [FS communication UI]
//if ( im_floater )
//{
// im_floater->processSessionUpdate(input["body"]["info"]);
//}
LLIMSpeakerMgr* im_mgr = LLIMModel::getInstance()->getSpeakerManager(session_id);
if (im_mgr)
{

View File

@ -99,7 +99,9 @@ public:
const LLUUID& from_id,
const std::string& utf8_text,
const std::string& time,
const bool is_history,
// <FS:Zi> Add a distinct color for server side group chat replay
// const bool is_history,
const S32 is_history,
const bool is_region_msg,
U32 timestamp);

View File

@ -1353,19 +1353,12 @@ BOOL LLNetMap::handleToolTipAgent(const LLUUID& avatar_id)
// aka radar when above 1020m.
if (isHigher1020mBug)
{
FSRadar* radar = FSRadar::getInstance();
if (radar)
if (auto entry = FSRadar::getInstance()->getEntry(avatar_id); entry)
{
FSRadarEntry* entry = radar->getEntry(avatar_id);
if (entry)
if (F32 radar_distance = entry->getRange(); radar_distance > AVATAR_UNKNOWN_RANGE)
{
F32 radar_distance = entry->getRange();
if (radar_distance > AVATAR_UNKNOWN_RANGE)
{
distance = radar_distance;
isHigher1020mBug = false;
}
distance = radar_distance;
isHigher1020mBug = false;
}
}
}

View File

@ -1177,6 +1177,13 @@ void LLPanelProfileSecondLife::apply(LLAvatarData* data)
void LLPanelProfileSecondLife::processProperties(void* data, EAvatarProcessorType type)
{
// discard UDP replies for profile data if profile capability is available
// otherwise we will truncate profile descriptions to the old UDP limits
if (!gAgent.getRegionCapability(PROFILE_PROPERTIES_CAP).empty())
{
return;
}
if (APT_PROPERTIES == type)
{
const LLAvatarData* avatar_data = static_cast<const LLAvatarData*>(data);
@ -2996,6 +3003,13 @@ void LLPanelProfileFirstLife::onDiscardDescriptionChanges()
// <FS:Beq> Restore UDP profiles
void LLPanelProfileFirstLife::processProperties(void * data, EAvatarProcessorType type)
{
// discard UDP replies for profile data if profile capability is available
// otherwise we will truncate profile first life descriptions to the old UDP limits
if (!gAgent.getRegionCapability(PROFILE_PROPERTIES_CAP).empty())
{
return;
}
if (APT_PROPERTIES == type)
{
const LLAvatarData* avatar_data = static_cast<const LLAvatarData*>(data);
@ -3210,6 +3224,13 @@ void LLPanelProfileNotes::processProperties(LLAvatarNotes* avatar_notes)
// <FS:Beq> Restore UDP profiles
void LLPanelProfileNotes::processProperties(void * data, EAvatarProcessorType type)
{
// discard UDP replies for profile data if profile capability is available
// otherwise we will truncate profile notes to the old UDP limits
if (!gAgent.getRegionCapability(PROFILE_PROPERTIES_CAP).empty())
{
return;
}
if (APT_NOTES == type)
{
LLAvatarNotes* avatar_notes = static_cast<LLAvatarNotes*>(data);

View File

@ -76,6 +76,7 @@ static LLPanelInjector<LLSidepanelInventory> t_inventory("sidepanel_inventory");
static const char * const INBOX_BUTTON_NAME = "inbox_btn";
static const char * const INBOX_LAYOUT_PANEL_NAME = "inbox_layout_panel";
static const char * const INBOX_RELOAD_BUTTON_NAME = "reload_received_items_btn"; // <FS:Zi> Add reload button to inventory inbox
static const char * const INVENTORY_LAYOUT_STACK_NAME = "inventory_layout_stack";
static const char * const MARKETPLACE_INBOX_PANEL = "marketplace_inbox";
@ -180,6 +181,12 @@ BOOL LLSidepanelInventory::postBuild()
//LLTabContainer* tabs = mPanelMainInventory->getChild<LLTabContainer>("inventory filter tabs");
//tabs->setCommitCallback(boost::bind(&LLSidepanelInventory::updateVerbs, this));
// <FS:Zi> Add reload button to inventory inbox
if (LLButton* reload_inbox_btn = getChild<LLButton>(INBOX_RELOAD_BUTTON_NAME) ; reload_inbox_btn)
{
reload_inbox_btn->setClickedCallback(boost::bind(&LLSidepanelInventory::onReloadInboxClicked, this));
}
// </FS:Zi>
/*
EXT-4846 : "Can we suppress the "Landmarks" and "My Favorites" folder since they have their own Task Panel?"
Deferring this until 2.1.
@ -680,3 +687,16 @@ void LLSidepanelInventory::cleanup()
}
// </FS:Ansariel>
}
// <FS:Zi> Add reload button to inventory inbox
void LLSidepanelInventory::onReloadInboxClicked()
{
const LLUUID inbox_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_INBOX);
if (LLViewerInventoryCategory* cat = gInventory.getCategory(inbox_id); cat)
{
cat->setVersion(LLViewerInventoryCategory::VERSION_UNKNOWN);
cat->fetch();
}
}
// </FS:Zi>

View File

@ -110,6 +110,7 @@ private:
LLLayoutPanel* mInboxLayoutPanel;
protected:
void onReloadInboxClicked(); // <FS:Zi> Add reload button to inventory inbox
public:
void onBackButtonClicked();

View File

@ -5246,6 +5246,16 @@ void process_avatar_animation(LLMessageSystem *mesgsys, void **user_data)
mesgsys->getUUIDFast(_PREHASH_AnimationList, _PREHASH_AnimID, animation_id, i);
mesgsys->getS32Fast(_PREHASH_AnimationList, _PREHASH_AnimSequenceID, anim_sequence_id, i);
// <FS:Zi> Asset blacklist
if (FSAssetBlacklist::getInstance()->isBlacklisted(animation_id, LLAssetType::AT_ANIMATION))
{
// stop animation for onlookers; this won't help with deformers, but at least the
// user themselves doesn't see it, and everyone who comes in after this won't either
gAgent.sendAnimationRequest(animation_id, ANIM_REQUEST_STOP);
continue;
}
// </FS:Zi>
avatarp->mSignaledAnimations[animation_id] = anim_sequence_id;
// *HACK: Disabling flying mode if it has been enabled shortly before the agent

View File

@ -14,7 +14,7 @@
name="sidepanel_inventory_panel"
top="0"
label=""
height="570"
height="565"
visible="true">
<layout_stack
follows="left|right|top|bottom"
@ -23,7 +23,7 @@
top="0"
orientation="vertical"
name="inventory_layout_stack"
height="570">
height="565">
<layout_panel
name="main_inventory_layout_panel"
layout="topleft"
@ -80,7 +80,15 @@
pad_left="35"
top="0"
left="5"
right="-5" />
right="-43" />
<button
name="reload_received_items_btn"
height="35"
width="35"
left_pad="3"
follows="top|right"
image_overlay="Refresh_Off"
tool_tip="Reload the received items list." />
<text
type="string"
length="1"
@ -88,7 +96,7 @@
layout="topleft"
height="13"
top="10"
right="-20"
right="-58"
name="inbox_fresh_new_count"
font="SansSerifMedium"
halign="right"

View File

@ -1358,6 +1358,11 @@
<color
name="ChatHistoryMessageFromLog"
reference="Gray" />
<!-- <FS:Zi> Add a distinct color for server side group chat replay -->
<color
name="ChatHistoryMessageFromServerLog"
value=".37 .51 .38 1" />
<!-- </FS:Zi> -->
<color
name="AreaSearchBeaconColor"
reference="Blue_80" />

View File

@ -32,9 +32,6 @@
<panel.string name="area_text">
Sahə
</panel.string>
<panel.string name="area_size_text">
[AREA] m²
</panel.string>
<panel.string name="auction_id_text">
Hərrac ID-si: [ID]
</panel.string>
@ -132,9 +129,6 @@
<text name="PriceLabel">
Sahə:
</text>
<text name="PriceText">
4048 m²
</text>
<text name="Traffic:">
Trafik:
</text>
@ -180,9 +174,6 @@
<text name="covenant_timestamp_text">
Axırınci dəyişiklər: 31 dekabr 1969 il., cümə, 16:00:00
</text>
<text name="region_section_lbl">
Region:
</text>
<text name="region_name_text">
Yüklənir...
</text>

View File

@ -66,6 +66,6 @@
</fs_scroll_list>
</panel>
</tab_container>
<button label="ОК" label_selected="ОК" name="ok_btn"/>
<button label="OK" label_selected="OK" name="ok_btn"/>
<button label="Ləğv et" label_selected="Ləğv et" name="cancel_btn"/>
</floater>

View File

@ -14,6 +14,6 @@
<text name="hours_textbox">
saat
</text>
<button label="ОК" name="ok_btn"/>
<button label="OK" name="ok_btn"/>
<button label="Ləğv et" name="cancel_btn"/>
</floater>

View File

@ -30,11 +30,11 @@
<text name="GroupLabel">
Qrup:
</text>
<check_box label="Paylaş" name="share_with_group" tool_tip="Позволить всем участникам выбранной группы получить установленные вам права на этот объект. Для включения ролевых ограничений необходимо произвести сделку."/>
<check_box label="Paylaş" name="share_with_group" tool_tip="Seçilmiş qrupun bütün üzvlərinə bu obyektdə təyin etdiyiniz hüquqları almağa icazə verin. Rol məhdudiyyətlərini aktivləşdirmək üçün müqavilə bağlamalısınız."/>
<text name="AnyoneLabel">
Hamısı:
</text>
<check_box label="Köçürt" name="everyone_copy" tool_tip="Копию объекта может взять любой желающий. Объект и все его содержимое должны копироваться и передаваться."/>
<check_box label="Köçürt" name="everyone_copy" tool_tip="Hər kəs obyektin köçürtməsin götürə bilər. Obyekt və onun bütün məzmunu köçürülə və paylaşıla bilməlidir."/>
<text left="200" name="NextOwnerLabel">
Yeni Sahibi:
</text>

View File

@ -103,7 +103,7 @@ Daha kiçik bir sahə seçməyə çalışın.
</floater.string>
<floater.string name="info_price_string">
L$ [PRICE]
(L$ [PRICE_PER_SQM]/м²)
(L$ [PRICE_PER_SQM]/m²)
[SOLD_WITH_OBJECTS]
</floater.string>
<floater.string name="insufficient_land_credits">
@ -181,7 +181,7 @@ Daha kiçik bir sahə seçməyə çalışın.
</text>
<text name="info_price">
L$ 1500
(L$ 1,1/м²)
(L$ 1,1/m²)
obyektlər daxil satılıb
</text>
<text name="info_action">

View File

@ -41,7 +41,7 @@
<check_box label="İndi t. et" name="apply_immediate" width="100" />
<button label="LSL köç."
tool_tip="Rəng dəyərini &lt;r, g, b&gt;. formatda LSL rəng vektoruna köçürdür" name="copy_lsl_btn" width="80" />
<button label="ОК" label_selected="ОК" name="select_btn"/>
<button label="OK" label_selected="OK" name="select_btn"/>
<button label="Ləğv et" label_selected="Ləğv et" name="cancel_btn"/>
<text name="Current color:">
^ Cari rəng ^

View File

@ -4,7 +4,7 @@
Qrafikanın öncədən təyinini sil
</string>
<string name="title_camera">
Камеры Kameranın öncədən təyinini sil
Kameranın öncədən təyinini sil
</string>
<text name="Preset">
Öncədən təyini seçin

View File

@ -63,7 +63,7 @@
<panel name="edit_scrolling_panel">
<text name="edit_experience_title_label" value="Adı:"/>
<text name="edit_experience_desc_label" value="Təsviri:"/>
<button name="Group_btn" label="Группа"/>
<button name="Group_btn" label="Qrup"/>
<text name="edit_ContentRating">
Reytinq:
</text>

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="avatarrendersettings" title="Исключения отображения аватара">
<floater name="avatarrendersettings" title="Avatar göstərmə istisnaları">
<floater.string name="av_render_never">Heç vaxt</floater.string>
<floater.string name="av_render_always">Tam olaraq</floater.string>
<filter_editor label="Фильтр аватаров" name="filter_input" />
<filter_editor label="Avatar süzgəci" name="filter_input" />
<menu_button name="plus_btn" tool_tip="Siyahıya yeni şəxs əlavə et"/>
<name_list name="avatar_list">
<name_list.columns label="Ad" name="name" />

View File

@ -18,7 +18,7 @@
<menu_button name="gear_btn" tool_tip="Əlavə seçimlər"/>
<button name="new_gesture_btn" tool_tip="Yeni jest yarat"/>
<button name="activate_btn" tool_tip="Seçilmiş jesti aktivləşdirin/deaktiv et"/>
<check_box label="Только активные" name="FSShowOnlyActiveGestures" width="150"/>
<check_box label="Yalnız aktiv" name="FSShowOnlyActiveGestures" width="150"/>
<button name="del_btn" tool_tip="Bu jesti sil"/>
</panel>
<button label="Dəyişdir" name="edit_btn" tool_tip="Seçilmiş jesti dəyişdirmək üçün pəncərəni açır."/>

View File

@ -63,12 +63,12 @@
<text name="target_avatar_name">
(xarakter yoxdur)
</text>
<button label="Xarici torpaqda skriptlərlə xarakter obyektlərini silin" label_selected="Xarici ölkədə skriptlərlə xarakter obyektlərini silin" name="Delete Target&apos;s Scripted Objects On Others Land" tool_tip="Удаление всех объектов со скриптами, принадлежащих персонажу, на земле, не принадлежащей персонажу. «Не копируемые» объекты будут возвращены."/>
<button label="*Bütün* ərazilərdə skriptlərlə simvol obyektlərini silin" label_selected="*Bütün* ərazilərdə skriptlərlə simvol obyektlərini silin" name="Delete Target&apos;s Scripted Objects On *Any* Land" tool_tip="Удаление всех объектов со скриптами, принадлежащих персонажу, в этом регионе. «Не копируемые» объекты будут возвращены."/>
<button label="*BÜTÜN* xarakter obyektlərini silin" label_selected="*BÜTÜN* xarakter obyektlərini silin" name="Delete *ALL* Of Target&apos;s Objects" tool_tip="Удаление всех объектов, принадлежащих персонажу, в этом регионе. «Не копируемые» объекты будут возвращены."/>
<button label="Toqquşmaların ən fəal iştirakçıları" label_selected="Toqquşmaların ən fəal iştirakçıları" name="Get Top Colliders" tool_tip="Список объектов, для которых наблюдается больше всего детализированных обратных вызовов" width="260"/>
<button label="Ən yaxşı skriptləri yükləyin" label_selected="Ən yaxşı skriptləri yükləyin" name="Get Top Scripts" tool_tip="Список объектов, в которых скрипты выполняются дольше всего" width="200"/>
<button label="Skript Xülasəsi" label_selected="Skript Xülasəsi" name="Scripts digest" tool_tip="Список всех скриптов с числом использований по каждому из них" width="160"/>
<button label="Xarici torpaqda skriptlərlə xarakter obyektlərini silin" label_selected="Xarici regionda skriptlərlə xarakter obyektlərini silin" name="Delete Target&apos;s Scripted Objects On Others Land" tool_tip="Hədəfin sahibi olmayan torpaqda hədəfə məxsus bütün skript obyektlərini silin. Köçürülə bilməyən obyektlər geri qaytarılacaq."/>
<button label="*Bütün* ərazilərdə skriptlərlə simvol obyektlərini silin" label_selected="*Bütün* ərazilərdə skriptlərlə simvol obyektlərini silin" name="Delete Target&apos;s Scripted Objects On *Any* Land" tool_tip="Bu bölgədəki hədəfə məxsus bütün skript obyektlərini silin. Köçürülə bilməyən obyektlər geri qaytarılacaq."/>
<button label="*BÜTÜN* xarakter obyektlərini silin" label_selected="*BÜTÜN* xarakter obyektlərini silin" name="Delete *ALL* Of Target&apos;s Objects" tool_tip="Bu bölgədəki hədəfə məxsus bütün obyektləri silin. Köçürülə bilməyən obyektlər geri qaytarılacaq."/>
<button label="Toqquşmaların ən fəal iştirakçıları" label_selected="Toqquşmaların ən fəal iştirakçıları" name="Get Top Colliders" tool_tip="Ən çox ətraflı geri çağırışlı obyekt siyahısı" width="260"/>
<button label="Ən yaxşı skriptləri yükləyin" label_selected="Ən yaxşı skriptləri yükləyin" name="Get Top Scripts" tool_tip="Skriptlərin ən uzun müddət işlədiyi obyektlərin siyahısı" width="200"/>
<button label="Skript Xülasəsi" label_selected="Skript Xülasəsi" name="Scripts digest" tool_tip="Bütün skriptlərin siyahısını və hər birinin baş vermə sayını alır" width="160"/>
</panel>
<panel label="Sorğu" name="request">
<text name="Destination:">

View File

@ -8,9 +8,9 @@
<text name="LabelItemNameTitle">Adı:</text>
<text name="LabelItemDescTitle">Təsviri:</text>
<text name="LabelCreatorTitle">Yaradıcı:</text>
<button label="Профиль…" name="BtnCreator"/>
<button label="Profil…" name="BtnCreator"/>
<text name="LabelOwnerTitle">Sahibi:</text>
<button label="Профиль…" name="BtnOwner"/>
<button label="Profil…" name="BtnOwner"/>
<text name="LabelAcquiredTitle">Alınıb:</text>
<text name="LabelAcquiredDate">Ç. 24 May 12:50:46 2006</text>
<text name="LabelItemExperienceTitle">Macəra:</text>

View File

@ -265,7 +265,7 @@
<panel name="weights_and_warning_panel">
<button label="Çəki və haqqı hesablayın" name="calculate_btn" tool_tip="Çəki və haqqı hesablayın"/>
<button label="Ləğv et" name="cancel_btn"/>
<button label="Yüklə" name="ok_btn" tool_tip="Загрузить в симулятор"/>
<button label="Yüklə" name="ok_btn" tool_tip="Simulyatora yüklə"/>
<button label="Seçimləri silin və formanı sıfırlayın" name="reset_btn"/>
<!-- ========== WEIGHTS ==========-->
<text name="upload_fee">Qiymət: L$ [FEE]</text>

View File

@ -165,7 +165,7 @@
D
</text>
<line_editor name="edit_d_value" tool_tip="D növlü xarakterlər üçün keçilə bilməsi. Xarakter nümunəsi - fərqli."/>
<button label="Применить изменения" name="apply_edit_values"/>
<button label="Dəyişikləri tətbiq et" name="apply_edit_values"/>
<text name="suggested_use_a_label">
(Humanoid)
</text>

View File

@ -10,6 +10,6 @@
<check_box label="köçürtmək" name="next_owner_copy"/>
<check_box initial_value="true" label="satmaq/paylaşmaq" name="next_owner_transfer"/>
</panel>
<button label="ОК" label_selected="ОК" name="ok"/>
<button label="OK" label_selected="OK" name="ok"/>
<button label="Ləğv et" label_selected="Ləğv et" name="cancel"/>
</floater>

View File

@ -78,23 +78,23 @@
<text name="T_Zoom" tool_tip="Real mənada bu, yaxınlaşdırma funksiyasıdır. Bu, görünüş pəncərəsindəki baxış sahəsini dəyişəcək. Bu, Ctrl+0 və ya Ctrl+8 düymələrini basmaqla eynidir. QEYD. Əgər siz flycam-ı (3D SpacenNavigator) aktiv etmisinizsə, bu işləməyəcək.">
Baxış bucağı
</text>
<button name="Reset_Camera_Angle" label="С" tool_tip="Susmaya görə olan vəziyyətə qaytarın."/>
<button name="Reset_Camera_Angle" label="S" tool_tip="Susmaya görə olan vəziyyətə qaytarın."/>
<text name="T_Zoom_Speed" tool_tip="Controls how fast/slow the camera will zoom in and out. Higher values produce slower and smother zoom.">
Sür. miqyas
</text>
<button name="Reset_Zoom_Time" label="С" tool_tip="Susmaya görə olan vəziyyətə qaytarın."/>
<button name="Reset_Zoom_Time" label="S" tool_tip="Susmaya görə olan vəziyyətə qaytarın."/>
<text name="T_Camera_Lag" tool_tip="Avatar hərəkətindən kamera gecikməsi dəyəri (0 = heç biri, 30 = avatar sürəti).">
Gecikmə
</text>
<button name="Reset_Camera_Lag" label="С" tool_tip="Susmaya görə olan vəziyyətə qaytarın."/>
<button name="Reset_Camera_Lag" label="S" tool_tip="Susmaya görə olan vəziyyətə qaytarın."/>
<text name="T_Camera_Offset" tool_tip="Kameranın defolt baxış nöqtəsindən nə qədər uzaqlaşdığına/sürüşdürülməsinə nəzarət edir.">
Sürüşdürmə
</text>
<button name="Reset_Camera_Offset" label="С" tool_tip="Susmaya görə olan vəziyyətə qaytarın."/>
<button name="Reset_Camera_Offset" label="S" tool_tip="Susmaya görə olan vəziyyətə qaytarın."/>
<text name="T_Camera_Smoothing" tool_tip="Kameranın nə qədər hamar sürətlənməsinə və dayanmasına nəzarət edir. Daha yüksək dəyərlər daha hamar (və bir qədər yavaş) hərəkət verir.">
Hamalaşdırma
</text>
<button name="Reset_Camera_Smoothing" label="С" tool_tip="Susmaya görə olan vəziyyətə qaytarın."/>
<button name="Reset_Camera_Smoothing" label="S" tool_tip="Susmaya görə olan vəziyyətə qaytarın."/>
</panel>
</panel>

View File

@ -72,7 +72,7 @@
<text name="ObjectMeshDetailText">
Aşağı
</text>
<slider label="Гибкие примитивы:" name="FlexibleMeshDetail"/>
<slider label="Çevik primitivlər:" name="FlexibleMeshDetail"/>
<text name="FlexibleMeshDetailText">
Aşağı
</text>

View File

@ -35,7 +35,7 @@
<radio_item label="HTTP proxy istifadə et" name="OtherHTTPProxy" tool_tip="Veb səhifələrə daxil olarkən HTTP proxy istifadə edilsin." value="Veb"/>
<radio_item label="SOCKS 5 server istifadə et" name="OtherSocksProxy" tool_tip="Veb saytlarla bağlı olmayan HTTP trafiki SOCKS 5 serverindən keçirilsin." value="SOCKS"/>
</radio_group>
<button label="ОК" label_selected="ОК" name="OK"/>
<button label="OK" label_selected="OK" name="OK"/>
<button label="Ləğv et" label_selected="Ləğv et" name="Cancel"/>
</floater>

View File

@ -72,7 +72,7 @@
</panel>
</view>
<text name="image_res_text">
[WIDTH] (en) x [HEIGHT] (hündürlük) пикс.
[WIDTH] (en) x [HEIGHT] (hündürlük) piks.
</text>
<text name="file_size_label">
[SIZE] KB

View File

@ -277,21 +277,21 @@
<text name="label position">
Yerləşim (metr)
</text>
<button name="copy_pos_btn" label="К" tool_tip="Yerləşməni köçürt"/>
<button name="paste_pos_btn" label="В" tool_tip="Yerləşməni yapışdır"/>
<button name="paste_pos_clip_btn" label="в" tool_tip="Yerləşməni buferdən daxil et"/>
<button name="copy_pos_btn" label="K" tool_tip="Yerləşməni köçürt"/>
<button name="paste_pos_btn" label="Y" tool_tip="Yerləşməni yapışdır"/>
<button name="paste_pos_clip_btn" label="y" tool_tip="Yerləşməni buferdən daxil et"/>
<text name="label size">
Ölçü (metr)
</text>
<button name="copy_size_btn" label="К" tool_tip="Ölçünü köçürt"/>
<button name="paste_size_btn" label="В" tool_tip="Ölçünü yapışdır"/>
<button name="paste_size_clip_btn" label="в" tool_tip="Ölçünü buferdən daxil et"/>
<button name="copy_size_btn" label="K" tool_tip="Ölçünü köçürt"/>
<button name="paste_size_btn" label="Y" tool_tip="Ölçünü yapışdır"/>
<button name="paste_size_clip_btn" label="y" tool_tip="Ölçünü buferdən daxil et"/>
<text name="label rotation">
Döngə (dərəcə)
</text>
<button name="copy_rot_btn" label="К" tool_tip="Döngəni köçürt"/>
<button name="paste_rot_btn" label="В" tool_tip="Döngəni yapışdır"/>
<button name="paste_rot_clip_btn" label="в" tool_tip="Döngəni buferdən daxil et"/>
<button name="copy_rot_btn" label="K" tool_tip="Döngəni köçürt"/>
<button name="paste_rot_btn" label="Y" tool_tip="Döngəni yapışdır"/>
<button name="paste_rot_clip_btn" label="y" tool_tip="Döngəni buferdən daxil et"/>
<button label="Köçürt" name="copy_params_btn" tool_tip="Seçimləri buferə köçürt"/>
<button label="Yapışdır" name="paste_params_btn" tool_tip="Seçimləri buferdən yapışdır"/>
<combo_box name="comboBaseType">
@ -577,7 +577,7 @@ Aşğ. ↔ Əaşğ.
Sahə: [AREA] m²
</text>
<button label="Torpaq haqqında" label_selected="Torpaq haqqında" name="button about land"/>
<check_box label="Показать владельцев" name="checkbox show owners" tool_tip="Цвет участка в зависимости от типа владения: &#10;&#10;Зеленый = ваша земля &#10;Голубой = земля вашей группы &#10;Красный = чужая земля &#10;Желтый = для продажи &#10;Фиолетовый = для аукциона &#10;Серый = общая"/>
<check_box label="Sahibləri göstər" name="checkbox show owners" tool_tip="Mülkiyyət növündən asılı olaraq sahə rəngi: &#10;&#10;Yaşıl = torpağınızdır &#10;Göy = qrupunuzun torpağı &#10;Qırmızı = yad torpaq &#10;Sarı = satış üçün &#10;Bənövşəyi = hərrac üçün &#10;Boz = ümumi"/>
<text name="label_parcel_modify">
Sahəni dəyişdir
</text>

View File

@ -25,7 +25,7 @@
URL-ünvanlar
</floater.string>
<floater.string name="memory">
Yaddaş (КБ)
Yaddaş (KB)
</floater.string>
<text name="title_text">
Yüklənir...

View File

@ -4,7 +4,7 @@
Bing appID açarı təsdiqlənməyib. Yenidən cəhd edin.
</string>
<string name="google_api_key_not_verified">
Ключ Google API açarı təsdiqlənməyib. Yenidən cəhd edin.
Google API açarı təsdiqlənməyib. Yenidən cəhd edin.
</string>
<string name="bing_api_key_verified">
Bing appID açarı təsdiqlənib.

View File

@ -106,7 +106,7 @@
Roxanne
</string>
<string name="effect_Rumble">
Урчание
Bozarma
</string>
<string name="effect_Sabrina">
Sabrina

View File

@ -10,7 +10,7 @@
<menu_item_call label="Skeleti sıfırla" name="Reset Skeleton"/>
<menu_item_call label="Skelet və animasiyanı sıfırla" name="Reset Skeleton And Animations"/>
<menu_item_call label="Meş LOD sıfırlanması" name="Reset Mesh LOD" />
<context_menu label="Управление" name="Annoyance">
<context_menu label="İdarə" name="Annoyance">
<menu_item_call label="Blokla" name="Avatar Mute"/>
<menu_item_call label="Blokdan çıxart" name="Avatar Unmute"/>
<menu_item_call label="Şikayət" name="abuse"/>

View File

@ -24,5 +24,5 @@
<menu_item_check label="Tam adı: Göstərilən adı (İstifadəçi adı) kimi" name="format_displayname_username" />
<menu_item_check label="Axtarış filterini göstər" name="friend_filter" />
</menu>
<menu_item_check label="Статус онлайн для друзей" name="GlobalOnlineStatusToggle" />
<menu_item_check label="Dostlar üçün daxilolma statusu" name="GlobalOnlineStatusToggle" />
</context_menu>

View File

@ -17,7 +17,7 @@
<menu_item_call label="Yeni əlcəklər" name="New Gloves"/>
<menu_item_call label="Yeni mayka" name="New Undershirt"/>
<menu_item_call label="Yenu tuman" name="New Underpants"/>
<menu_item_call label="Yeni alfaа" name="New Alpha"/>
<menu_item_call label="Yeni alfa" name="New Alpha"/>
<menu_item_call label="Yeni fizika" name="New Physics"/>
<menu_item_call label="Yeni döymə" name="New Tattoo"/>
</menu>

View File

@ -9,7 +9,7 @@
<menu_item_call label="Don" name="Skirt"/>
<menu_item_call label="Ayaqqabı" name="Shoes"/>
<menu_item_call label="Corablar" name="Socks"/>
<menu_item_call label="Куртку" name="Jacket"/>
<menu_item_call label="Pencək" name="Jacket"/>
<menu_item_call label="Əlcəklər" name="Gloves"/>
<menu_item_call label="Mayka" name="Self Undershirt"/>
<menu_item_call label="Tuman" name="Self Underpants"/>
@ -18,7 +18,7 @@
<menu_item_call label="Bütün paltarı" name="All Clothes"/>
</context_menu>
<context_menu label="Ayır" name="Inspect Self Detach"/>
<menu_item_call label="Отделить все" name="Detach All"/>
<menu_item_call label="Hamısını ayır" name="Detach All"/>
</context_menu>
<menu_item_call label="Geyimi dəyiş" name="Chenge Outfit"/>
<menu_item_call label="Geyimi dəyişdir" name="Edit Outfit"/>

View File

@ -111,7 +111,7 @@
<menu_item_call label="İM Göndər" name="Send Instant Message"/>
<menu_item_call label="Teleport təklif et" name="Offer Teleport..."/>
<menu_item_call label="Teleport tələb et" name="Request Teleport..."/>
<menu_item_call label="Начать конференц чат" name="Conference Chat"/>
<menu_item_call label="Konfrans söhbətə başla" name="Conference Chat"/>
<menu_item_call label="Aktivləşdirm" name="Activate"/>
<menu_item_call label="Deaktivləşdir" name="Deactivate"/>
<menu_item_call label="Ayrı saxla" name="Save As"/>
@ -125,8 +125,8 @@
<menu_item_call label="Teksturasını yenilə" name="Texture Refresh Attachment" />
<menu_item_call label="Özündən ayır" name="Detach From Yourself"/>
<menu_item_call label=ıxart" name="Take Off"/>
<menu_item_call name="Settings Apply Local" label="Применить только к себе"/>
<menu_item_call name="Settings Apply Parcel" label="Применить к Участку"/>
<menu_item_call name="Settings Apply Local" label="Yalnız özümə tətbiq et"/>
<menu_item_call name="Settings Apply Parcel" label="Sahəyə tətbiq et"/>
<menu_item_call label="Ticarət mərkəzinin məhsul siyahılarına köçürt" name="Marketplace Copy"/>
<menu_item_call label="Ticarət mərkəzinin məhsul siyahılarına daşı" name="Marketplace Move"/>
<menu_item_call label="--seçim yoxdur--" name="--no options--"/>

View File

@ -8,7 +8,7 @@
<menu_item_call label="Şəkil çək" name="take_snapshot"/>
<menu_item_call label="Şəkili sil" name="remove_photo"/>
<context_menu label="Yeni paltar" name="New Clothes">
<menu_item_call label="Yeni köynəkа" name="New Shirt"/>
<menu_item_call label="Yeni köynək" name="New Shirt"/>
<menu_item_call label="Yeni şalvar" name="New Pants"/>
<menu_item_call label="Yeni ayaqqabı" name="New Shoes"/>
<menu_item_call label="Yeni corablar" name="New Socks"/>

View File

@ -2,5 +2,5 @@
<toggleable_menu name="menu_group_plus">
<menu_item_check label="Tarixə görə sırala" name="sort_most" />
<menu_item_check label="Adına görə sırala" name="sort_name" />
<menu_item_check name="view_icons" label="Показать иконки" />
<menu_item_check name="view_icons" label="Nişanları göstər" />
</toggleable_menu>

View File

@ -18,7 +18,7 @@
<pie_slice label="Fizika" name="Self Physics"/>
<pie_slice label="Alfa" name="Self Alpha"/>
</pie_menu>
<pie_slice label="Юбку" name="Skirt"/>
<pie_slice label="Don" name="Skirt"/>
</pie_menu>
<pie_menu name="Pie Object Detach HUD"/>
<pie_menu label="Ayır &gt;" name="Pie Object Detach">
@ -50,7 +50,7 @@
<pie_slice label="Jestlər..." name="Gestures"/>
<pie_menu label="Görünüş &gt;" name="Appearance &gt;">
<pie_slice label="Forma" name="Edit My Shape"/>
<pie_menu name="ResetMenu" label="Сброс &gt;">
<pie_menu name="ResetMenu" label="Sıfırla &gt;">
<pie_slice label="Skel. &amp; Anim." name="Reset Skeleton And Animations"/>
<pie_slice label="Skelet" name="Reset Skeleton"/>
<pie_slice label="Mesh LOD" name="Reset Mesh LOD"/>

View File

@ -40,7 +40,7 @@
<pie_slice label="Tekstur.yenilə" name="Texture Refresh"/>
<pie_slice label="Skelet" name="Reset Skeleton"/>
</pie_menu>
<pie_menu name="DerenderMenu" label="Неотображать &gt;">
<pie_menu name="DerenderMenu" label="Göstərmə &gt;">
<pie_slice label="Həmişə" name="DerenderPermanent"/>
<pie_slice label="Müvəqqəti" name="Derender"/>
</pie_menu>

View File

@ -163,32 +163,6 @@
</menu>
</menu>
<!-- <menu label="Положение солнца" name="Environment Settings">
<menu_item_check label="Восход" name="Sunrise"/>
<menu_item_check label="Полдень" name="Noon"/>
<menu_item_check label="Закат" name="Sunset"/>
<menu_item_check label="Полночь" name="Midnight"/>
<menu_item_check label="Время острова" name="Revert to Region Default"/>
</menu>
<menu label="Редактор окружающей среды" name="Environment Editor">
<menu_item_call label="Параметры среды..." name="Environment Settings"/>
<menu name="Water Presets" label="Предустановки воды">
<menu_item_call label="Новая предустановка..." name="new_water_preset"/>
<menu_item_call label="Редактировать предустановку..." name="edit_water_preset"/>
<menu_item_call label="Удалить предустановку..." name="delete_water_preset"/>
</menu>
<menu name="Sky Presets" label="Предустановки неба">
<menu_item_call label="Новая предустановка..." name="new_sky_preset"/>
<menu_item_call label="Редактировать предустановку..." name="edit_sky_preset"/>
<menu_item_call label="Удалить предустановку..." name="delete_sky_preset"/>
</menu>
<menu name="Day Presets" label="Предустановки дня">
<menu_item_call label="Новая предустановка..." name="new_day_preset"/>
<menu_item_call label="Редактировать предустановку..." name="edit_day_preset"/>
<menu_item_call label="Удалить предустановку..." name="delete_day_preset"/>
</menu>
</menu> -->
<menu name="photo_and_video" label="Şəkil və video">
<menu_item_call label="Şəkil alətləri" name="phototools_item_call"/>
<menu_item_call label="Kamera alətləri" name="cameratools_item_call"/>

View File

@ -94,7 +94,7 @@
</mimetype>
<mimetype name="video/vnd.secondlife.qt.legacy">
<label name="vnd.secondlife.qt.legacy_label">
Видео (QuickTime)
Video (QuickTime)
</label>
</mimetype>
<mimetype name="application/javascript">

View File

@ -26,16 +26,10 @@ Xəta təfərrüatları: &quot;[_NAME]&quot; adlı bildiriş notifications.xml f
<notification name="TutorialNotFound">
Hazırda heç bir dərslik yoxdur
</notification>
<notification name="GenericAlert">
[MESSAGE]
</notification>
<notification name="GenericAlertYesCancel">
[MESSAGE]
<usetemplate name="okcancelbuttons" notext="Ləğv et" yestext="Bəli"/>
</notification>
<notification name="GenericAlertOK">
[MESSAGE]
</notification>
<notification name="BadInstallation">
[APP_NAME] yenilənərkən xəta baş verdi. Klientin [https://www.firestormviewer.org/downloads ən son versiyasını yükləyin].
</notification>
@ -195,7 +189,7 @@ Zəhmət olmasa, bir element seçin və yenidən cəhd edin.
</notification>
<notification name="AllowMultipleViewers">
Birdən çox tətbiqin [APP_NAME] icrası dəstəklənmir. Bu, tekstur keşinin münaqişələrinə, zədələnmə, performans və vizual yavaşlamaya səbəb ola bilər.
<usetemplate name="okbutton" yestext="ОК"/>
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="GrantModifyRights">
Başqa sakinə dəyişdirmə hüquqlarının verilməsi ona HƏR obyektinizi dəyişdirməyə, silməyə və ya götürməyə imkan verəcək. Bu icazənin verilməsində ÇOX diqqətli olun.
@ -421,7 +415,7 @@ Silahın işləməsi üçün skriptlər icra edilməlidir.
Birdən çox üz seçildi.
Bu hərəkəti davam etdirsəniz, obyektin hər seçilmiş üzünə ayrıca media nümunəsi yerləşdiriləcək.
Medianı yalnız bir üzdə yerləşdirmək üçün &quot;Üzü seçmək&quot; əmrini seçin və obyektin istədiyiniz üzünə basın, sonra &quot;Əlavə et&quot; düyməsini basın.
<usetemplate ignoretext="Медиа будет помещено на несколько выбранных граней" name="okcancelignore" notext="Ləğv et" yestext="Bəli"/>
<usetemplate ignoretext="Media bir neçə seçilmiş üzün üstünə tətbiq olunacaq" name="okcancelignore" notext="Ləğv et" yestext="Bəli"/>
</notification>
<notification name="MustBeInParcel">
Teleportasiya nöqtəsini təyin etmək üçün siz sahədə olmalısınız.
@ -651,7 +645,7 @@ Obyekt əhatə dairəsindən kənarda ola və ya silinə bilər.
</notification>
<notification name="MediaFileDownloadUnsupported">
Siz [APP_NAME] tərəfindən dəstəklənməyən fayl endirilməsi üçün sorğu göndərmisiniz.
<usetemplate ignoretext="Предупреждать о загрузке неподдерживаемых файлов" name="okignore" yestext="Bəli"/>
<usetemplate ignoretext="Dəstəklənməyən faylları endirmək barədə xəbərdarlıq edin" name="okignore" yestext="Bəli"/>
</notification>
<notification name="CannotWriteFile">
[[FILE]] faylını yazmaq mümkün deyil
@ -777,7 +771,7 @@ Bütün satın alınan əşyaları eyni bölgəyə köçürün.
<notification name="PromptGoToCurrencyPage">
[EXTRA]
Перейти на [_URL] для получения информации о покупке L$?
L$ almaq haqqında məlumat üçün [_URL] ünvanına keçmək istədiyinə əminsiniz?
<url name="url">
http://secondlife.com/app/currency/
</url>
@ -1196,7 +1190,7 @@ Bu, adətən müvəqqəti bir problemdir. Seçimləri düzəldin və bir neçə
Qrup üçün torpaq almaq mümkün deyil:
Sizin aktiv qrupunuz üçün torpaq almaq hüququnuz yoxdur.
</notification>
<notification label="Добавить друга" name="AddFriendWithMessage">
<notification label="Dost əlavə et" name="AddFriendWithMessage">
Dostlar xəritədə bir-birlərini izləmək və onlayn statuslarını görmək üçün icazə verə bilərlər.
[NAME] adlı şəxsə dostluq sorğusu göndərilsin?
@ -1421,9 +1415,9 @@ Bu [AREA] m² torpaq &quot;[GROUP_NAME]&quot; qrupuna ötürülsün?
Ekran seçimləri səviyyəsi təhlükəsiz olaraq təyin edilib, çünki -safe seçimi müəyyən edilib.
</notification>
<notification name="DisplaySetToRecommendedGPUChange">
Установлен рекомендуемый уровень настроек отображения, так как графическая карта изменена:
с &quot;[LAST_GPU]&quot;
на &quot;[THIS_GPU]&quot;
Qrafik kartı dəyişdirildiyinə görə tövsiyə olunmuş göstərmə profili təyin olunub:
əvvəlki &quot;[LAST_GPU]&quot;
cari &quot;[THIS_GPU]&quot;
</notification>
<notification name="DisplaySetToRecommendedFeatureChange">
Göstərmə alt sistemi dəyişdirildiyi üçün tövsiyə olunan displey seçimləri səviyyəsi təyin edilir.
@ -1635,7 +1629,7 @@ Zəhmət olmasa, bir obyekt seçin və yenidən cəhd edin.
[AGENT] torpaq sahibini bloklananlar siyahısına əlavə etmək mümkün deyil.
</notification>
<notification name="GroupIsAlreadyInList">
&lt;nolink&gt;[GROUP]&lt;/nolink&gt; уже находится в списке допущенных групп.
&lt;nolink&gt;[GROUP]&lt;/nolink&gt; artıq icazə verilən qruplar siyahısındadır.
</notification>
<notification name="AgentIsAlreadyInList">
[AGENT] artıq [LIST_TYPE] siyahınızdadır.
@ -1816,12 +1810,12 @@ Bütün gələn dostluq sorğularını rədd et rejimi aktivdir.
</notification>
<notification name="RejectAllGroupInvitesModeSet">
Bütün gələn qrup dəvətlərini rədd et rejimi aktivdir.
Входящие групповые приглашения от кого-либо теперь будут отклоняться автоматически. Bu səbəbə görə sizə məlumat verilməyəcək.
Hər kəsdən gələn qrup dəvətləri indi avtomatik olaraq rədd ediləcək. Bu səbəbə görə sizə məlumat verilməyəcək.
<usetemplate ignoretext="Bütün qrup dəvətlərini rədd etmək üçün statusumu dəyişirəm" name="okignore" yestext="Bəli"/>
</notification>
<notification name="JoinedTooManyGroupsMember">
Qrupların maksimum sayına çatdınız. Qoşulmazdan əvvəl hər hansı bir qrupdan ayrılın və ya təklifi rədd edin.
[NAME] пригласил вас вступить в группу как участник.
[NAME] qrupa üzv kimi qoşulmaq təklif etdi.
<usetemplate name="okcancelbuttons" notext="Rədd edt" yestext="Qoşul"/>
</notification>
<notification name="JoinedTooManyGroups">
@ -1979,7 +1973,7 @@ Onu silmək istərdinizmi?
[HISTORY_ENTRY] yerinə teleport etmək istədiyinizə əminsiniz?
<usetemplate ignoretext="Tarixçədə bir yerə teleportasiyanı təsdiqləyin" name="okcancelignore" notext="Ləğv et" yestext="Teleport ol"/>
</notification>
<notification label="Сообщение всем в моем землевладении" name="MessageEstate">
<notification label="Torpaq mülkiyyətimdə hər kəsə mesaj" name="MessageEstate">
Hazırda mülkünüzdə olan bütün sakinlər üçün qısa bir elan daxil edin.
<form name="form">
<button name="OK" text="OK"/>
@ -2296,7 +2290,7 @@ Zəhmət olmasa, bir obyekt seçin və yenidən cəhd edin.
Eyni zamanda bir neçə obyektin məzmununu ala bilməzsiniz.
Zəhmət olmasa, bir obyekt seçin və yenidən cəhd edin.
</notification>
<notification label="Нельзя купить содержимое" name="BuyContentsOneOwner">
<notification label="Məzmunu almaq mümkün deyil" name="BuyContentsOneOwner">
Eyni zamanda müxtəlif sahiblərdən obyektləri ala bilməzsiniz.
Zəhmət olmasa, bir obyekt seçin və yenidən cəhd edin.
</notification>
@ -2407,7 +2401,7 @@ Element(lər) daşınılsın?
</notification>
<notification name="ConfirmAddingChatParticipants">
Mövcud söhbətə iştirakçı əlavə etdiyiniz zaman yeni söhbət yaradılacaq. Bütün iştirakçılar yeni söhbət haqqında bildirişlər alacaqlar.
<usetemplate ignoretext="Söhbət iştirakçılarının əlavə edilməsini təsdiqləyin" name="okcancelignore" notext="Ləğv et" yestext="ОК"/>
<usetemplate ignoretext="Söhbət iştirakçılarının əlavə edilməsini təsdiqləyin" name="okcancelignore" notext="Ləğv et" yestext="OK"/>
</notification>
<notification name="ConfirmQuit">
Çıxmaq istədiyinizdə əminsiniz?
@ -2680,8 +2674,8 @@ Domen: [MEDIADOMAIN]
URL: [MEDIAURL]
<form name="form">
<button name="Do Now" text="İndi [ACTION]"/>
<button name="RememberDomain" text="[CONDITION] Разрешить этому домену"/>
<button name="RememberURL" text="[CONDITION] Разрешить этому URL"/>
<button name="RememberDomain" text="[CONDITION] Bu domenə icazə ver"/>
<button name="RememberURL" text="[CONDITION] Bu URL üçün icazə ver"/>
</form>
</notification>
<notification name="MediaAlertSingle">
@ -2712,9 +2706,9 @@ URL: [AUDIOURL]
Domen: [AUDIODOMAIN]
URL: [AUDIOURL]
<form name="form">
<button name="Do Now" text="[ACTION] Сейчас"/>
<button name="RememberDomain" text="[CONDITION] Разрешить этому домену"/>
<button name="RememberURL" text="[CONDITION] Разрешить этому URL"/>
<button name="Do Now" text="[ACTION] İndi"/>
<button name="RememberDomain" text="[CONDITION] Bu domenə icazə ver"/>
<button name="RememberURL" text="[CONDITION] Bu URL üçün icazə ver"/>
</form>
</notification>
<notification name="AudioAlertSingle">
@ -2808,7 +2802,7 @@ Mövzu: [SUBJECT], Mesaj: [MESSAGE]
Əsas əmlaklar arasında avadanlıq siyahısı göndərmək mümkün deyil.
</notification>
<notification name="UnableToLoadNotecard">
Невозможно загрузить заметку.
Qeydi yükləmək mümkün deyil.
Yenidən cəhd edin.
</notification>
<notification name="ScriptMissing">
@ -2893,21 +2887,6 @@ Daha kiçik bir sahə seçməyə çalışın.
<notification name="NoContentToSearch">
Axtarmaq üçün ən azı bir növ məzmun seçin (&quot;Ümumi&quot;, &quot;Ortam&quot; vəya &quot;Yetkin&quot;).
</notification>
<notification name="SystemMessage">
[MESSAGE]
</notification>
<notification name="FlickrConnect">
[MESSAGE]
</notification>
<notification name="PaymentReceived">
[MESSAGE]
</notification>
<notification name="PaymentSent">
[MESSAGE]
</notification>
<notification name="PaymentFailure">
[MESSAGE]
</notification>
<notification name="EventNotification">
Hadisə bildirişi:
@ -2993,7 +2972,7 @@ Burada uça bilməzsiniz.
<usetemplate name="okbutton" yestext="Regionu bərpa et"/>
</notification>
<notification name="DynamicPathfindingDisabled">
В этом регионе не разрешен динамический поиск пути. Возможны нарушения работы скриптовых объектов с использованием вызовов LSL поиска пути.
Bu regionda dinamik yol axtarışı söndürülüb. Yol axtaran LSL çağırışlarından istifadə edən skriptli obyektlər bu regionda gözlənildiyi kimi işləməyə bilər.
</notification>
<notification name="PathfindingCannotRebakeNavmesh">
Bir xəta baş verdi. Şəbəkə və ya server problemi ola bilər və ya sizin tikinti icazəniz yoxdur. Bəzən sistemdən çıxmaq və yenidən daxil olmaq bu problemi həll edə bilər.
@ -3662,7 +3641,7 @@ Aşağıdakı sakinlərlə:
Aşağıdakı əşyalarla paylaşmaq istədiyinizə əminsiniz?
&lt;nolink&gt;[ITEMS]&lt;/nolink&gt;
<usetemplate name="okcancelbuttons" notext="Ləğv et" yestext="ОК"/>
<usetemplate name="okcancelbuttons" notext="Ləğv et" yestext="OK"/>
</notification>
<notification name="ItemsShared">
Əşyalar uğurla paylaşıldı.
@ -3740,10 +3719,10 @@ https://wiki.firestormviewer.org/fs_voice
<usetemplate ignoretext="Səs serverinə qoşulma zamanı problemlər yarandı" name="okignore" yestext="Bəli"/>
</notification>
<notification name="NoVoiceConnect-GIAB">
Проблемы соединения с речевым сервером:
Səs serverinə qoşulmaq mümkün deyil:
Голосовое общение будет недоступно.
Проверьте настройки сети и брандмауэра.
Səsli rabitə mövcud olmayacaq.
Zəhmət olmasa şəbəkənizi və təhlükəsizlik divarı quraşdırmanızı yoxlayın.
[https://wiki.firestormviewer.org/fs_voice]
</notification>
<notification name="AvatarRezLeftNotification">
@ -3811,8 +3790,7 @@ Görünüş sahəsini fırlatmaq üçün dünyanın istənilən yerinə basın v
Burada fərdiləşdirilə bilən görünülən adınızı təyin edin. Bu, dəyişdirilə bilməyən unikal istifadəçi adınıza əlavədir. Siz seçimlərdə digər insanların adlarını necə gördüyünüzü dəyişə bilərsiniz.
</notification>
<notification label="Kamera" name="HintView">
Для изменения вида из камеры используйте инструменты &quot;Вращение&quot; и &quot;Сдвиг&quot;. При нажатии клавиши Esc или переходе вид из камеры возвращается к исходному состоянию.
Kamera görünüşünüzü dəyişdirmək üçün Fırlatma və Sürüşdürmə idarəetmə elementlərindən istifadə edin. Esc düyməsinə basmaqla və ya gəzməklə görünüşünüzü sıfırlayın.
Kamera görünüşünüzü dəyişdirmək üçün &quot;Döndər&quot;&quot;Sürüşdür&quot; idarəetmə elementlərindən istifadə edin. Esc düyməsinə basmaqla və ya gəzməklə görünüşünüzü sıfırlayın.
</notification>
<notification label="Avadanlıq siyahısı" name="HintInventory">
Elementləri tapmaq üçün avadanlıq siyahınızı yoxlayın. Ən yeni elementləri Son pəncərəsində asanlıqla tapmaq olar.
@ -3863,7 +3841,6 @@ Görünüş sahəsini fırlatmaq üçün dünyanın istənilən yerinə basın v
Proksi seçimləri [APP_NAME] tətbiqini yenidən başlatdıqdan sonra qüvvəyə minir.
</notification>
<notification name="AuthRequest">
Сайт по адресу &quot;&lt;nolink&gt;[HOST_NAME]&lt;/nolink&gt;&quot; в царстве &quot;in realm &quot;[REALM]&quot; требует имени пользователя и пароля.
&quot;[REALM]&quot; &quot; sahəsində &quot; &quot;&lt;nolink&gt;[HOST_NAME]&lt;/nolink&gt;&quot; saytı istifadəçi adı və parol tələb edir.
<form name="form">
<input name="username" text="İstifadəçi adı"/>
@ -3961,7 +3938,7 @@ Davam edilsin?
<notification name="PathfindingLinksets_MismatchOnRestricted_MismatchOnVolume">
Bəzi seçilmiş keçid dəstləri keçiddə icazə məhdudiyyətlərinə görə '[REQUESTED_TYPE]' olaraq təyin edilə bilməz. Bu keçid dəstləri əvəzinə "[RESTRICTED_TYPE]" olaraq təyin ediləcək.
Bəzi seçilmiş keçid dəstləri '[REQUESTED_TYPE]' olaraq təyin edilə bilməz, çünki forma qabarıq deyil. Тип использования этих наборов связей не изменится.
Bəzi seçilmiş keçid dəstləri '[REQUESTED_TYPE]' olaraq təyin edilə bilməz, çünki forma qabarıq deyil. Bu keçid dəstlərinin istifadə növü dəyişilməyəcək.
Davam edilsin?
<usetemplate ignoretext="Bəzi seçilmiş link dəstləri keçidlər dəstində icazə məhdudiyyətləri və forma qeyri-qabarıq olduğu üçün təyin edilə bilməz." name="okcancelignore" notext="Ləğv et" yestext="Bəli"/>
@ -3971,7 +3948,7 @@ Davam edilsin?
Bəzi seçilmiş keçid dəstləri keçiddə icazə məhdudiyyətlərinə görə '[REQUESTED_TYPE]' olaraq təyin edilə bilməz. Bu keçid dəstləri əvəzinə "[RESTRICTED_TYPE]" olaraq təyin ediləcək.
Bəzi seçilmiş keçid dəstləri '[REQUESTED_TYPE]' olaraq təyin edilə bilməz, çünki forma qabarıq deyil. Тип использования этих наборов связей не изменится.
Bəzi seçilmiş keçid dəstləri '[REQUESTED_TYPE]' olaraq təyin edilə bilməz, çünki forma qabarıq deyil. Bu keçid dəstlərinin istifadə növü dəyişilməyəcək.
Davam edilsin?
<usetemplate ignoretext="Bəzi seçilmiş keçid dəstlərinin fantom bayrağı dəyişdiriləcək, digərləri isə keçid setindəki icazə məhdudiyyətləri və forma qeyri-qabarıq olduğu üçün təyin edilə bilməz." name="okcancelignore" notext="Ləğv et" yestext="Bəli"/>
@ -4094,9 +4071,6 @@ Intel drayver veb-saytını yoxlamaq istəyirsiniz?
[SYSINFO]
<usetemplate name="okcancelbuttons" yestext="Göndər" notext="Ləğv et"/>
</notification>
<notification name="BlockLoginInfo">
[REASON]
</notification>
<notification name="TestversionExpired">
[APP_NAME] tətbiqinin bu sınaq versiyasının vaxtı keçib və daha istifadə edilə bilməz.
</notification>
@ -4247,11 +4221,11 @@ Cəhd ləğv edildi.
</notification>
<notification name="PathfindingReturnMultipleItems">
Siz [NUM_ITEMS] elementi qaytarırsınız. Davam etmək istədiyinizə əminsiniz?
<usetemplate ignoretext="Вы уверены, что хотите вернуть несколько объектов?" name="okcancelignore" notext="Xeyr" yestext="Bəli"/>
<usetemplate ignoretext="Bir neçə obyekti qaytarmaq istədiyiniə əminsiniz?" name="okcancelignore" notext="Xeyr" yestext="Bəli"/>
</notification>
<notification name="PathfindingDeleteMultipleItems">
Siz [NUM_ITEMS] elementi silirsiniz. Davam etmək istədiyinizə əminsiniz?
<usetemplate ignoretext="Вы уверены, что хотите удалить несколько объектов?" name="okcancelignore" notext="Xeyr" yestext="Bəli"/>
<usetemplate ignoretext="Bir neçə obyekti silmək istədiyiniə əminsiniz?" name="okcancelignore" notext="Xeyr" yestext="Bəli"/>
</notification>
<notification name="AvatarFrozen">
[AV_FREEZER] sizi dondurdu. Siz hərəkət edə və ya dünya ilə əlaqə saxlaya bilməzsiniz.
@ -4391,7 +4365,7 @@ O, dolu ola və ya tezliklə yenidən başlaya bilər.
Seçilmiş obyekti saxlamaq mümkün deyil: &quot;[OBJ_NAME]&quot; obyekti köçürülmür.
</notification>
<notification name="NoModNoTaking">
Нельзя забрать выбранное: вам не разрешено изменять объект &quot;[OBJ_NAME]&quot;.
Seçilmişləri götürmək mümkün deyil: &quot;[OBJ_NAME]&quot; obyektinə dəyişiklik etmək icazəniz yoxdur
</notification>
<notification name="RezDestInternalError">
Daxili xəta: naməlum növ təyinat yeri.
@ -4594,7 +4568,7 @@ daşımaq mümkün deyil, çünki siz navigasiya şəbəkəsini region sərhədl
Tələb olunan obyekti yaratmaq mümkün deyil. Region artıq doludur.
</notification>
<notification name="CantCreateAnimatedObjectTooLarge">
НевTələb olunan animasiya obyektini yaratmaq mümkün deyil, çünki o, rig üçbucaq limitini keçib.
Tələb olunan animasiya obyektini yaratmaq mümkün deyil, çünki o, rig üçbucaq limitini keçib.
</notification>
<notification name="CantAttackMultipleObjOneSpot">
Eyni nöqtəyə birdən çox obyekt əlavə edə bilməzsiniz.
@ -4702,10 +4676,10 @@ daşımaq mümkün deyil, çünki siz navigasiya şəbəkəsini region sərhədl
Əlavə edilmiş obyekti yerə atmaq alınmadı: burada yerə atmaq icazəniz yoxdur.
</notification>
<notification name="CantDropAttachmentInsufficientLandResources">
Əlavə edilmiş obyekti yerə atmaq alınmadı: не хватает свободных земельных ресурсов.
Əlavə edilmiş obyekti yerə atmaq alınmadı: boş torpaq resursları çatışmır.
</notification>
<notification name="CantDropAttachmentInsufficientResources">
Əlavə edilmiş obyektləri yerə atmaq alınmadı:: не хватает свободных ресурсов.
Əlavə edilmiş obyektləri yerə atmaq alınmadı: boş resurslar çatışmır.
</notification>
<notification name="CantDropObjectFullParcel">
Obyekti bura atmaq olmaz. Sahə artıq doludur.
@ -4806,7 +4780,7 @@ Daha kiçik bir sahə seçməyə çalışın.
Regionda reklamlara icazə verilmir.
</notification>
<notification name="LandPassExpireSoon">
Ваш пропуск на эту землю скоро закончится.
Bu torpağa icazənamənin müddəti tezliklə bitəcək
</notification>
<notification name="CantSitNoSuitableSurface">
Oturmaq üçün uyğun səth yoxdur. Başqa yerdə cəhd edin.
@ -4964,9 +4938,6 @@ Onlar xətaları həll etmək üçün http://opensimulator.org/wiki/inventory is
<notification name="DefaultObjectPermissions">
Defolt obyekt icazələrini yadda saxlayarkən problem baş verdi: [REASON]. Lütfən, defolt icazələri daha sonra təyin etməyə cəhd edin.
</notification>
<notification name="OutfitPhotoLoadError">
[REASON]
</notification>
<notification name="AddPaymentMethod">
Növbəti səhifədə L$ məbləği seçin və
Sifariş yerləşdir düyməsini basın. Ödəniş zamanı
@ -5203,14 +5174,14 @@ hansı nişandan istifadə etmək istərdiniz?
<usetemplate ignoretext="Mənə bildirin ki, onlayn statusun görünməsinə keçid bir qədər vaxt apara bilər" name="okignore" yestext="Bəli"/>
</notification>
<notification name="RenderVolumeLODFactorWarning">
ВНИМАНИЕ: уровень детализации (LOD) установлен на высокий
XƏBƏRDARLIQ: Dətallaşdırma səviyyəsi (LOD) yüksək olaraq təyin edilib
Для повседневного использования достаточно уровня в диапазоне 1-3.
Попробуйте заменить объекты, которые выглядят деформированными при таких значениях.
Gündəlik istifadə üçün 1-3 aralığında səviyyə kifayətdir.
Bu səviyyələrdə əyri görünən obyektləri əvəz etməyə çalışın.
Уровень LOD > 3: добавляет задержки. Рекомендуется только для фотографии.
Уровень LOD > 4: использовать в особых случаях. Возврат после relog.
Уровень LOD > 8: не имеет реального эффекта. Может вызвать ошибки.
LOD > 3 səviyyəsi: gecikmə əlavə edir. Yalnız şəkil üçün tövsiyə olunur.
LOD > 4 səviyyəsi: xüsusi hallarda istifadə edin. Yenidən daxil olduqdan sonra geri qayıdır.
LOD > 8 səviyyəsi: real təsiri yoxdur. Səhvlərə səbəb ola bilər.
</notification>
<notification name="CurrencyURIOverrideReceived">
Bu bölgə üçüncü tərəf valyuta portalını təyin etməyi seçdi.

View File

@ -3,7 +3,7 @@
<scroll_container name="avatar_universal_scroll">
<panel name="avatar_universal_color_panel">
<texture_picker label="Baş döyməsi" name="Head Universal Tattoo" tool_tip="Şəkil seçmək üçün basın"/>
<texture_picker label="Üst döyməsiу" name="Upper Universal Tattoo" tool_tip="Şəkil seçmək üçün basın"/>
<texture_picker label="Üst döyməsi" name="Upper Universal Tattoo" tool_tip="Şəkil seçmək üçün basın"/>
<texture_picker label="Alt döyməsi" name="Lower Universal Tattoo" tool_tip="Şəkil seçmək üçün basın"/>
<texture_picker label="Don döyməsi" name="Skirt Tattoo" tool_tip="Şəkil seçmək üçün basın"/>
<texture_picker label="Saç döyməsi" name="Hair Tattoo" tool_tip="Şəkil seçmək üçün basın"/>

View File

@ -105,7 +105,7 @@
<labeled_back_button label="Yadda saxla" name="back_btn" tool_tip="Geyimin dəyişdirilməsinə qayıt"/>
<text name="edit_wearable_title" value="Fiquranın dəyişdirilməsi"/>
<panel label="Köynək" name="wearable_type_panel">
<text name="description_text" value="Фигура:"/>
<text name="description_text" value="Forma:"/>
<radio_group name="sex_radio">
<radio_item label="" name="sex_male" tool_tip="Kişi" value="1"/>
<radio_item label="" name="sex_female" tool_tip="Qadın" value="0"/>

View File

@ -41,7 +41,7 @@ Günlük maksimum 200 bildiriş göndərilə bilər.
<button name="remove_attachment" tool_tip="Bildirişinizdən əlavəni silin"/>
<button label="Avadanklq siyahısı" name="open_inventory" tool_tip="Avadanlıq siyahısını aç"/>
<button label="Göndər" label_selected="Göndər" name="send_notice"/>
<group_drop_target name="drop_target" tool_tip="Перетащите из инвентаря на эту панель предмет, чтобы отправить его вместе с сообщением. У вас должно быть разрешение на копирование и передачу этого предмета."/>
<group_drop_target name="drop_target" tool_tip="Mesajla birlikdə göndərmək üçün avadanlıq siyahınızdan elementi bu panelə çəkin. Bu elementi köçürtəmək və paylaşmaq üçün icazəniz olmalıdır."/>
</panel>
<panel label="Arxivlənmiş bildirişlər" name="panel_view_past_notice">
<text name="lbl6">

View File

@ -62,7 +62,7 @@
</text>
</panel>
<panel name="trash_btn_panel">
<dnd_button name="trash_btn" tool_tip="Удалить выбранный элемент"/>
<dnd_button name="trash_btn" tool_tip="Seçilmiş elementi sil"/>
</panel>
</panel>
</panel>

View File

@ -7,10 +7,10 @@
&lt;boşdur&gt;
</string>
<string name="parcel_media_name">
Потоковое видео на участке
Sahədə axın video
</string>
<string name="parcel_audio_name">
Потоковый звук на участке
Sahədə axın musiqi
</string>
<string name="playing_suffix">
(oynadılır)

View File

@ -5,7 +5,7 @@
<string name="unsaved_changes" value="Saxlanılmamış dəyişiklər"/>
<string name="now_editing" value="İndi dəyişdirilir"/>
<panel.string name="not_available">
(нет)
(yox)
</panel.string>
<panel.string name="unknown">
(naməlum)

View File

@ -101,7 +101,7 @@
<text name="estate_name_label" value="Əmlak:"/>
<text name="estate_rating_label" value="Reytinq:"/>
<text name="estate_owner_label" value="Sahibi:"/>
<text name="estate_owner" value="Тест имени владельца используя длинное имя"/>
<text name="estate_owner" value="Uzun addan istifadə edərək sahib adı sınağı"/>
<text name="covenant_label" value="Müqavilə:"/>
</panel>
</accordion_tab>

View File

@ -9,7 +9,6 @@
<check_box label="Sazlama menyusunu göstər (Öz riskinizə görə istifadə edin!)" name="show_develop_menu_check"/>
<check_box label="Windows sistemlərində WMI ilə VRAM aşkarlamasını söndür" name="FSDisableWMIProbing"/>
<check_box label="Menyu axtarışını göstər" name="show_search_menu_check"/>
<!-- <check_box label="Включить использование анимации с временным шагом (Эксперементально)" tool_tip="Эта настройка может уменьшить нагрузку прорисовки на дальних аватаров но также может привести к воспроизведению их анимаций на неправильных скоростях" name="UseAnimationTimeSteps"/> -->
<text name="BackgroundYieldTimeText">
[APP_NAME] ön planda olmadıqda, hər bir kadrı digər tətbiqlərə qəbul etmək üçün millisaniyələrlə vaxtın miqdarı (defolt: 40; 1 saniyə = 1000 millisaniyə):
</text>

View File

@ -36,7 +36,7 @@
<check_box label="Nişangahı göstərin" name="ShowCrosshairs" tool_tip="Birinci şəxs baxımından nişangahı göstərin"/>
<check_box label="Döyüş qabiliyyətlərini aktivləşdirin" name="FSMouselookCombatFeatures"/>
<check_box label="Hədəf markerlərini çəkin (oxlar)" name="ExodusMouselookIFF"/>
<slider label="Məsafə (м)" name="ExodusMouselookIFFRange"/>
<slider label="Məsafə (m)" name="ExodusMouselookIFFRange"/>
<text name="Mouse Sensitivity">
Siçan həssaslığı:
</text>

View File

@ -45,10 +45,10 @@
</combo_box>
<button label="Jurnalı təmizlə..." name="clear_log"/>
<button label="Tarixçələri təmizlə..." name="delete_transcripts"/>
<check_box name="LogNearbyChat" label="Сохранить историю общего чата" tool_tip="Запись сообщения общего чата на жестком диске"/>
<check_box label="Использовать старый формат имени в истории" name="UseLegacyIMLogNames" tool_tip="Если опция включена, формат устаревшего имени файла для транскриптов (User Name) будет использоваться вместо нового формата (user_name)."/>
<check_box label="Добавить время в названии файла истории" name="LogFileNamewithDate" tool_tip="Добавляет время в названии файла в формате chat-ГГГГ-ММ-ДД и 'ЛС имя файла'-ГГГГ-ММ."/>
<check_box label="Использовать встроенный просмотр истории" name="FSUseBuiltInHistory" tool_tip="Использовать встроенный просмотр истории, если отключено, то будет открываться программа просмотра текстовых файлов по умолчанию системы"/>
<check_box name="LogNearbyChat" label="Ümumi söhbət tarixçəsini yadda saxlayın" tool_tip="Ümumi söhbət mesajının tarixini sabit diskinizə yazır"/>
<check_box label="Tarixdə köhnə ad formatından istifadə edin" name="UseLegacyIMLogNames" tool_tip="Bu seçim aktiv edilərsə, yeni format (user_name) əvəzinə tarixçə üçün köhnə fayl adı formatı (User Name) istifadə olunacaq."/>
<check_box label="Tarix faylının adına vaxt əlavə edin" name="LogFileNamewithDate" tool_tip="chat-YYYY-AA-GG və 'PM fayl adı'-YYYY-AA formatında fayl adına vaxt əlavə edir."/>
<check_box label="Daxili tarixə baxıcıdan istifadə edin" name="FSUseBuiltInHistory" tool_tip="Daxili tarixə baxıcıdan istifadə edir. Əgər söndürülsə, o, sistemin standart mətn faylı görüntüləyicisini açacaq"/>
</panel>
<panel label="Kamera diqqəti (LookAt)" name="tab-lookat">
<check_box label="Başqaları nəyə baxdığını göstər:" name="showlookat" tool_tip="Avatarın kamera bağlantı nöqtəsini müəyyənləşdirmək üçün istifadə olunur."/>

View File

@ -55,7 +55,7 @@
<text name="description_label">Təsviri:</text>
<text name="location_label">Məkan:</text>
<text name="classified_location_edit">Yüklənir...</text>
<button name="set_to_curr_location_btn" label="Установить текущее местоположение"/>
<button name="set_to_curr_location_btn" label="Cari məkanı təyin et"/>
<text name="category_label" value="Kateqoriya:"/>
<text name="content_type_label" value="Məzmun növü:"/>
<icons_combo_box name="content_type_edit" label="Ümumi">

View File

@ -25,7 +25,7 @@
<text_editor name="user_key" value="(yüklənir...)"/>
<layout_stack name="imagepositioner">
<layout_panel name="image_action_panel">
<menu_button name="image_action_btn" tool_tip="Выполнение действий, связанных с изображением профиля"/>
<menu_button name="image_action_btn" tool_tip="Profil şəkli ilə bağlı tədbirlər görmək"/>
</layout_panel>
<layout_panel name="label_stack">
<text name="label" value="Yaş:"/>

View File

@ -45,7 +45,7 @@
<layout_stack name="ls_environment_config2">
<layout_panel name="pnl_environment_current">
<text name="select_environment_label">
Выбор окружающей среды
Ətraf mühitin seçimi
</text>
<button label="[USEDEFAULT]" name="btn_usedefault"/>
<button label="Avadanlıq siyahısından" name="btn_select_inventory"/>

View File

@ -64,7 +64,7 @@
Yüklənir...
</script_editor>
<combo_box label="Daxil et..." name="Insert..."/>
<text name="line_col" value="Строка 0, Столбец 0"/>
<text name="line_col" value="Sətir 0, Sütun 0"/>
<button label="Dəyişdirici..." name="edit_btn_2"/>
<button label="Yadda saxla" label_selected="Yadda saxla" name="save_btn_2"/>
</panel>

View File

@ -27,7 +27,7 @@
<text name="local_remember_location_sessions_text">
Seanslar arasında yeri və fayl adını saxlayın
</text>
<button label="&#x25B6; Выбор" name="cancel_btn"/>
<button label="&#x25B6; Seçim" name="cancel_btn"/>
<flyout_button label="Yadda saxla" name="save_btn" tool_tip="Şəkili fayla yadda saxla">
<flyout_button.item label="Yadda saxla" name="save_item"/>
<flyout_button.item label="Ayrı saxla..." name="saveas_item"/>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="status">
<panel name="parcel_info_panel">
<button name="buy_land_btn" tool_tip="Участок для продажи"/>
<button name="buy_land_btn" tool_tip="Satış üçün sahə"/>
<text tool_tip="Üzərində durduğunuz torpaq hissəsinin adı. Ətraflı oxumaq üçün basın." name="parcel_info_text" value="(yüklənir...)"/>
</panel>
<panel.string name="packet_loss_tooltip">
@ -20,7 +20,7 @@
[AMT] L$
</panel.string>
<panel name="menu_search_panel">
<search_editor label="Menyuda axtar" name="search_menu_edit" tool_tip="Введите интересующий вас термин для поиска здесь. Результаты будут отображены для частичного совпадения полного текста в меню."/>
<search_editor label="Menyuda axtar" name="search_menu_edit" tool_tip="Axtarış sözünüzü bura daxil edin. Nəticələr menyuda tam mətnin qismən uyğunluğu üçün göstəriləcək."/>
</panel>
<panel name="parcel_info_panel">
<button name="buy_land_btn" tool_tip="Satılan sahə"/>

View File

@ -4,15 +4,6 @@
For example, the strings used in avatar chat bubbles, and strings
that are returned from one component and may appear in many places-->
<strings>
<string name="SECOND_LIFE">
[CURRENT_GRID]
</string>
<string name="APP_NAME">
Firestorm
</string>
<string name="CAPITALIZED_APP_NAME">
FIRESTORM
</string>
<string name="SECOND_LIFE_GRID">
Second Life şəbəkəsi
</string>
@ -237,9 +228,6 @@ Səs serveri versiyası: [VOICE_VERSION]
<string name="AditiGridLabel">
Second Life Beta Test Şəbəkəsi (Aditi)
</string>
<string name="ViewerDownloadURL">
https://www.firestormviewer.org/choose-your-platform/
</string>
<string name="LoginFailedViewerNotPermitted">
İstifadə etdiyiniz klientin artıq Second Life oyununa girişi yoxdur. Siz müştərinin yeni versiyasını bu ünvandan yükləyə bilərsiniz:
https://www.firestormviewer.org/choose-your-platform/
@ -380,8 +368,8 @@ Bir dəqiqədən sonra yenidən daxil olmağa çalışın.
Bir dəqiqədən sonra yenidən daxil olmağa çalışın.
</string>
<string name="LoginFailedAuthenticationMFARequired">
Чтобы продолжить вход в систему, введите новый токен из приложения многофакторной аутентификации.
Если вы считаете, что это ошибка, пожалуйста, свяжитесь с support@secondlife.com
Daxil olmağa davam etmək üçün çoxfaktorlu autentifikasiya proqramından yeni token daxil edin.
Bunun səhv olduğunu düşünürsünüzsə, buraya məktub göndərin: support@secondlife.com.
</string>
<string name="AgentLostConnection">
Bu bölgədə, ola bilsin ki, problemlər ola bilər. Şəbəkə bağlantınızı yoxlayın.
@ -423,7 +411,6 @@ Bir dəqiqədən sonra yenidən daxil olmağa çalışın.
<string name="SocialFlickrErrorDisconnecting">
Flickr-dən ayrılmaq mümkün deyil
</string>
<string name="BlackAndWhite">
Qara və Ağ
</string>
@ -542,7 +529,7 @@ Bir dəqiqədən sonra yenidən daxil olmağa çalışın.
Dəyişdirmək qadağandır
</string>
<string name="TooltipFlagNotSafe">
Тəhlükəsiz deyil
Təhlükəsiz deyil
</string>
<string name="TooltipFlagNoFly">
Uçuşlar qadağandır
@ -732,9 +719,6 @@ Bir dəqiqədən sonra yenidən daxil olmağa çalışın.
<string name="SLappAgentUnmute">
Yan. səsi
</string>
<string name="SLappAgentIM">
IM
</string>
<string name="SLappAgentPay">
Ödə
</string>
@ -1214,7 +1198,7 @@ etmək haqqında kömək almaq üçün http://secondlife.com/support ünvanına
Kamera istifadəçiyə diqqətləşdirilə bilmir, çünki onlar göstərmə məsafənizdən kənardadırlar.
</string>
<string name="Ok">
ОК
OK
</string>
<string name="Premature end of file">
Faylın vaxtından əvvəl sonu
@ -1738,24 +1722,18 @@ etmək haqqında kömək almaq üçün http://secondlife.com/support ünvanına
<string name="InventoryOutboxNoItemsTitle">
«Göndərilən» qovluqunuz boşdur.
</string>
<string name="InventoryOutboxNoItemsTooltip">
</string>
<string name="InventoryOutboxNoItems">
Qovluqları bu sahəyə daşıyın və [[MARKETPLACE_DASHBOARD_URL] Ticarət mərkəzində] satış üçün siyahıya atmaq üçün Ticarət mərkəzində Göndər üzərinə basın.
</string>
<string name="InventoryOutboxInitializingTitle">
Ticarət mərkəzinin inisiallaşdrılıması.
</string>
<string name="InventoryOutboxInitializingTooltip">
</string>
<string name="InventoryOutboxInitializing">
[[MARKETPLACE_CREATE_STORE_URL] Dükan hesabınıza] müraciət eləyirik.
</string>
<string name="InventoryOutboxErrorTitle">
Ticarət mərkəzinin səhvləri.
</string>
<string name="InventoryOutboxErrorTooltip">
</string>
<string name="InventoryOutboxError">
[[MARKETPLACE_CREATE_STORE_URL] Dükan] xətaları qaytarır.
</string>
@ -2010,15 +1988,6 @@ Bu mesaj yenidən baş verərsə, kömək üçün http://support.secondlife.com
<string name="InvFolder All">
Hamısı
</string>
<string name="InvFolder #Firestorm">
#Firestorm
</string>
<string name="InvFolder #Phoenix">
#Phoenix
</string>
<string name="InvFolder #RLV">
#RLV
</string>
<string name="InvFolder My Suitcase">
Çamadanım
</string>
@ -2217,9 +2186,6 @@ Bu mesaj yenidən baş verərsə, kömək üçün http://support.secondlife.com
<string name="ATTACHMENT_NOT_ATTACHED">
Xəta: Obyekt hazırkı geyimdədir, lakin calaşdırılmayıb
</string>
<string name="YearsMonthsOld">
[AGEYEARS] [AGEMONTHS]
</string>
<string name="YearsOld">
[AGEYEARS]
</string>
@ -2235,9 +2201,6 @@ Bu mesaj yenidən baş verərsə, kömək üçün http://support.secondlife.com
<string name="TodayOld">
Bu gün qeydiyyatdan keçib
</string>
<string name="TotalDaysOld">
; [AGEDAYSTOTAL]
</string>
<string name="av_render_everyone_now">
İndi hamı sizi görə bilər.
</string>

View File

@ -51,7 +51,7 @@ Təlimi təkrarlamaq üçün 'Gəlmə Adası - Ümumi' nöqtəsinə keçin.
Bu regionu ziyarət etmək üçün ən azı 18 yaşınız olmalıdır.
</message>
<message name="RegionTPSpecialUsageBlocked">
Regiona daxil olmaq mümkün deyil. '[REGION_NAME]' oyun regionu sayılır, və daxil olmaq üçün six является игровым регионом и вы должны отвечать определенным критериям, чтобы войти. Для получения дополнительной информации, пожалуйста, просмотрите [http://wiki.secondlife.com/wiki/Linden_Lab_Official:Second_Life_Skill_Gaming_FAQ Skill Gaming FAQ].
Regiona daxil olmaq mümkün deyil. '[REGION_NAME]' oyun regionu sayılır, və daxil olmaq üçün siz müəyyən meyarlara cavab verməlisiniz. Ətraflı məlumat üçün [http://wiki.secondlife.com/wiki/Linden_Lab_Official:Second_Life_Skill_Gaming_FAQ Skill Gaming FAQ] səhifəsinə baxın.
</message>
</message_set>
<message_set name="progress">

View File

@ -11,7 +11,7 @@
<panel name="buttons_panel">
<button label="Stoppen" name="stop_btn" />
<button label="Stoppen und zurückziehen" name="stop_and_revoke_btn" />
<button label="Zurückziehen" name="revoke_btn" />
<button label="Blacklist" name="blacklist_btn" />
<check_box label="Keine im eigenen Besitz" name="no_owned_animations_check" tool_tip="Falls aktiviert, werden alle Animationen im Besitz des eigenen Avatars gefiltert, z.B. AO-Animationen oder Standard-Systemanimationen" />
</panel>
</floater>

View File

@ -9,6 +9,9 @@
<floater.string name="asset_sound">
Sound
</floater.string>
<floater.string name="asset_animation">
Animation
</floater.string>
<floater.string name="asset_resident">
Einwohner
</floater.string>

View File

@ -49,7 +49,7 @@
<!--Movement-->
<panel label="Bewegung" name="tab-movement">
<check_box label="Mit Pfeiltasten bewegen" name="arrow_keys_move_avatar_check"/>
<check_box label="Mit Pfeiltasten bewegen" name="arrow_keys_move_avatar_check" tool_tip="Gilt ausschließlich für das „Chat in der Nähe“-Fenster am unteren Bildrand des Viewers, nicht für den entsprechenden Reiter im „Gespräche“-Fenster."/>
<check_box label="Buchstabeneingabe beeinflusst Bewegung (z.B. WASD)" name="LetterKeysAffectsMovementNotFocusChatBar"/>
<check_box label="Drücken-drücken-halten, um zu rennen" name="tap_tap_hold_to_run"/>
<check_box label="Fliegen/Landen beim Drücken von auf (springen) / ab (kriechen)" name="automatic_fly" />

View File

@ -86,10 +86,10 @@
<button
follows="top|right"
height="22"
label="Revoke"
label="Blacklist"
layout="topleft"
left="0"
name="revoke_btn"
name="blacklist_btn"
top_pad="4"
width="98" />

View File

@ -21,6 +21,9 @@
<floater.string name="asset_sound">
Sound
</floater.string>
<floater.string name="asset_animation">
Animation
</floater.string>
<floater.string name="asset_resident">
Resident
</floater.string>

View File

@ -36,11 +36,11 @@
label="English"
name="English"
value="en" />
<!-- <combo_box.item
<combo_box.item
enabled="true"
label="Azərbaycanca (Azerbaijani)"
name="Azerbaijani"
value="az" /> -->
value="az" />
<!--
<combo_box.item
enabled="true"

View File

@ -467,6 +467,7 @@
layout="topleft"
left_delta="10"
name="arrow_keys_move_avatar_check"
tool_tip="Only applies to the Nearby Chat entry field at the bottom of the viewer, not to the Nearby Chat tab in Conversations."
width="237"
top_pad="8"/>
<check_box

View File

@ -82,7 +82,15 @@
pad_left="35"
top="0"
left="5"
right="-5" />
right="-43" />
<button
name="reload_received_items_btn"
height="35"
width="35"
left_pad="3"
follows="top|right"
image_overlay="Refresh_Off"
tool_tip="Reload the received items list." />
<text
type="string"
length="1"
@ -90,7 +98,7 @@
layout="topleft"
height="13"
top="10"
right="-20"
right="-58"
name="inbox_fresh_new_count"
font="SansSerifMedium"
halign="right"

View File

@ -11,7 +11,7 @@
<panel name="buttons_panel">
<button label="Stop" name="stop_btn"/>
<button label="Stop &amp; révoquer" name="stop_and_revoke_btn"/>
<button label="Révoquer" name="revoke_btn" width="100"/>
<button label="Blacklister" name="blacklist_btn" width="100"/>
<check_box label="Non possédées" name="no_owned_animations_check" tool_tip="Activer l'option filtrera les animations que possède votre avatar (AO et animations du système)."/>
</panel>
</floater>

View File

@ -3,6 +3,7 @@
<floater.string name="asset_object">Objet</floater.string>
<floater.string name="asset_texture">Texture</floater.string>
<floater.string name="asset_sound">Son</floater.string>
<floater.string name="asset_animation">Animation</floater.string>
<floater.string name="asset_resident">Résident</floater.string>
<floater.string name="asset_unknown">Inconnu</floater.string>
<floater.string name="unknown_object">Objet inconnu</floater.string>

View File

@ -3,7 +3,7 @@
<text name="language_textbox">Langue :</text>
<combo_box name="language_combobox">
<combo_box.item label="English (Anglais)" name="English"/>
<!-- <combo_box.item label="Azərbaycanca (Azerbaïdjanais)" name="Azerbaijani"/> -->
<combo_box.item label="Azərbaycanca (Azerbaïdjanais)" name="Azerbaijani"/>
<!-- <combo_box.item label="Dansk (Danois) - Beta" name="Danish"/> -->
<combo_box.item label="Deutsch (Allemand)" name="Deutsch(German)"/>
<combo_box.item label="Español (Espagnol) - Beta" name="Spanish"/>

View File

@ -11,7 +11,7 @@
<panel name="buttons_panel">
<button label="Zatrzymaj" name="stop_btn" />
<button label="Zatrzymaj i cofnij zezwol." name="stop_and_revoke_btn" />
<button label="Cofnij zezwol." name="revoke_btn" />
<button label="Zablokuj" name="blacklist_btn" />
<check_box label="Bez moich animacji" name="no_owned_animations_check" tool_tip="Gdy zaznaczysz tą opcję, to odfiltrowane zostaną animacje będące w posiadaniu Twojego awatara - jak te pochodzące z Animatora, mechanizmów zastępowania animacji lub domyślne systemowe." />
</panel>
</floater>

View File

@ -9,6 +9,9 @@
<floater.string name="asset_sound">
Dźwięk
</floater.string>
<floater.string name="asset_animation">
Animacja
</floater.string>
<floater.string name="asset_resident">
Rezydent
</floater.string>

View File

@ -43,7 +43,7 @@
<check_box label="Zamień osie myszy" name="invert_mouse"/>
</panel>
<panel label="Ruch" name="tab-movement">
<check_box label="Przyciski ze strzałkami zawsze poruszają awatarem" name="arrow_keys_move_avatar_check"/>
<check_box label="Przyciski ze strzałkami zawsze poruszają awatarem" name="arrow_keys_move_avatar_check" tool_tip="Dotyczy tylko pola wprowadzania 'czatu w pobliżu' na dole okna przeglądarki, a nie karty 'czatu w pobliżu' w Rozmowach." />
<check_box label="Naciskanie klawiszy liter wpływa na ruch (tzn. WASD) zamiast rozpoczynać czat" name="LetterKeysAffectsMovementNotFocusChatBar"/>
<check_box label="Puk-puk-trzymaj, aby biec" name="tap_tap_hold_to_run"/>
<check_box label="Przytrzymaj klawisz skoku lub kucania, aby zacząć lub przestać latać" name="automatic_fly"/>

View File

@ -11,7 +11,7 @@
<panel name="buttons_panel">
<button label="Стоп" name="stop_btn" />
<button label="Стоп и Отменить" name="stop_and_revoke_btn" />
<button label="Отменить" name="revoke_btn" />
<button label="Заблокировать" name="blacklist_btn" />
<check_box label="Нет моих анимаций" name="no_owned_animations_check" tool_tip="Будет отфильтровывать все анимации, которые принадлежат вашему аватару, такие как АО анимации или анимации системы по умолчанию" />
</panel>
</floater>

View File

@ -9,6 +9,9 @@
<floater.string name="asset_sound">
Звук
</floater.string>
<floater.string name="asset_animation">
Анимация
</floater.string>
<floater.string name="asset_resident">
Житель
</floater.string>

View File

@ -78,7 +78,7 @@
font="SansSerifMedium"
name="inbox_btn"
height="35"
width="308"
width="270"
image_unselected="MarketplaceBtn_Off"
image_selected="MarketplaceBtn_Selected"
halign="left"
@ -89,6 +89,14 @@
pad_left="35"
top="0"
left="10" />
<button
name="reload_received_items_btn"
height="35"
width="35"
left_pad="3"
follows="top|right"
image_overlay="Refresh_Off"
tool_tip="Reload the received items list." />
<text
type="string"
length="1"
@ -96,7 +104,7 @@
layout="topleft"
height="13"
top="10"
right="-20"
right="-58"
name="inbox_fresh_new_count"
font="SansSerifMedium"
halign="right"