Merge branch 'master' of https://github.com/Lirusaito/SingularityViewer.git
This commit is contained in:
6
README
6
README
@@ -18,7 +18,7 @@ as those based upon the OpenSim platform.
|
||||
Singulariy is maintained by a small group of volunteers who can be contacted
|
||||
both, in-world (SingularityViewer group) as well on IRC (#SingularityViewer
|
||||
@ FreeNode). Bug requests and features requests can be submitted through our
|
||||
Issue Tracket (http://code.google.com/p/singularity-viewer/issues/list or from
|
||||
Issue Tracker (http://code.google.com/p/singularity-viewer/issues/list or from
|
||||
the viewer menu: Help --> Bug Reporting --> Singularity Issue Tracker...)
|
||||
|
||||
|
||||
@@ -33,6 +33,6 @@ As this Readme grows out of date, please refer to
|
||||
History
|
||||
|
||||
The Singularity viewer was started by Siana Gearz in November 2010 by forking it
|
||||
of the Ascent Viewer, by Balseraph Software Group, which in turn was based upon
|
||||
source code released by Linden Lab.
|
||||
from the Ascent Viewer, by Balseraph Software Group, which in turn was based upon
|
||||
source code modified from the snowglobe source code released by Linden Lab.
|
||||
|
||||
|
||||
@@ -839,6 +839,7 @@ P(estateChangeInfoResponder);
|
||||
P(eventPollResponder);
|
||||
P(fetchInventoryResponder);
|
||||
P(fnPtrResponder);
|
||||
P2(groupMemberDataResponder, transfer_300s);
|
||||
P2(groupProposalBallotResponder, transfer_300s);
|
||||
P(homeLocationResponder);
|
||||
P(HTTPGetResponder);
|
||||
|
||||
@@ -24,12 +24,12 @@
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "linden_common.h"
|
||||
|
||||
#include "llavatarnamecache.h"
|
||||
|
||||
#include "llcachename.h" // we wrap this system
|
||||
#include "llcontrol.h" // For LLCachedControl
|
||||
#include "llframetimer.h"
|
||||
#include "llhttpclient.h"
|
||||
#include "llsd.h"
|
||||
@@ -624,7 +624,6 @@ bool LLAvatarNameCache::get(const LLUUID& agent_id, LLAvatarName *av_name)
|
||||
// ...only do immediate lookups when cache is running
|
||||
if (useDisplayNames())
|
||||
{
|
||||
|
||||
// ...use display names cache
|
||||
std::map<LLUUID,LLAvatarName>::iterator it = sCache.find(agent_id);
|
||||
if (it != sCache.end())
|
||||
@@ -669,6 +668,29 @@ bool LLAvatarNameCache::get(const LLUUID& agent_id, LLAvatarName *av_name)
|
||||
return false;
|
||||
}
|
||||
|
||||
// Return true when name has been set to Phoenix Name System Name, if not return false.
|
||||
bool LLAvatarNameCache::getPNSName(const LLUUID& agent_id, std::string& name)
|
||||
{
|
||||
LLAvatarName avatar_name;
|
||||
if (get(agent_id, &avatar_name))
|
||||
getPNSName(avatar_name, name);
|
||||
else return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// get() with callback compatible version of getPNSName
|
||||
void LLAvatarNameCache::getPNSName(const LLAvatarName& avatar_name, std::string& name)
|
||||
{
|
||||
static LLCachedControl<S32> phoenix_name_system("PhoenixNameSystem", 0);
|
||||
switch (phoenix_name_system)
|
||||
{
|
||||
case 0 : name = avatar_name.getLegacyName(); break;
|
||||
case 1 : name = avatar_name.getCompleteName(); break;
|
||||
case 2 : name = avatar_name.mDisplayName; break;
|
||||
default : name = avatar_name.getLegacyName(); break;
|
||||
}
|
||||
}
|
||||
|
||||
void LLAvatarNameCache::fireSignal(const LLUUID& agent_id,
|
||||
const callback_slot_t& slot,
|
||||
const LLAvatarName& av_name)
|
||||
|
||||
@@ -65,6 +65,12 @@ namespace LLAvatarNameCache
|
||||
// If name is in cache, returns true and fills in provided LLAvatarName
|
||||
// otherwise returns false
|
||||
bool get(const LLUUID& agent_id, LLAvatarName *av_name);
|
||||
// If get() succeeds, returns true and fills in name string
|
||||
// via void function below, otherwise returns false
|
||||
bool getPNSName(const LLUUID& agent_id, std::string& name);
|
||||
// Perform a filling of name string according to Phoenix Name System,
|
||||
// when we have an LLAvatarName already.
|
||||
void getPNSName(const LLAvatarName& avatar_name, std::string& name);
|
||||
|
||||
// Callback types for get() below
|
||||
typedef boost::signals2::signal<
|
||||
|
||||
@@ -693,6 +693,17 @@
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>LiruNoTransactionClutter</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Use notifytips for transactions instead of notifys, this way they do not collect in the top right of the screen.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>LiruSensibleARC</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
||||
@@ -638,22 +638,11 @@ void LLAvatarTracker::processChange(LLMessageSystem* msg)
|
||||
{
|
||||
if((mBuddyInfo[agent_id]->getRightsGrantedFrom() ^ new_rights) & LLRelationship::GRANT_MODIFY_OBJECTS)
|
||||
{
|
||||
std::string first, last;
|
||||
std::string fullname;
|
||||
LLSD args;
|
||||
LLAvatarName avatar_name;
|
||||
if (LLAvatarNameCache::get(agent_id, &avatar_name))
|
||||
{
|
||||
switch (gSavedSettings.getS32("PhoenixNameSystem"))
|
||||
{
|
||||
case 0 : fullname = avatar_name.getLegacyName(); break;
|
||||
case 1 : fullname = (avatar_name.mIsDisplayNameDefault ? avatar_name.mDisplayName : avatar_name.getCompleteName()); break;
|
||||
case 2 : fullname = avatar_name.mDisplayName; break;
|
||||
default : fullname = avatar_name.getCompleteName(); break;
|
||||
}
|
||||
if (LLAvatarNameCache::getPNSName(agent_id, fullname))
|
||||
args["NAME"] = fullname;
|
||||
}
|
||||
|
||||
|
||||
LLSD payload;
|
||||
payload["from_id"] = agent_id;
|
||||
if(LLRelationship::GRANT_MODIFY_OBJECTS & new_rights)
|
||||
@@ -740,15 +729,11 @@ static void on_avatar_name_cache_notify(const LLUUID& agent_id,
|
||||
{
|
||||
// Popup a notify box with online status of this agent
|
||||
// Use display name only because this user is your friend
|
||||
std::string name;
|
||||
LLAvatarNameCache::getPNSName(av_name, name);
|
||||
LLSD args;
|
||||
switch (gSavedSettings.getS32("PhoenixNameSystem"))
|
||||
{
|
||||
case 0 : args["NAME"] = av_name.getLegacyName(); break;
|
||||
case 1 : args["NAME"] = (av_name.mIsDisplayNameDefault ? av_name.mDisplayName : av_name.getCompleteName()); break;
|
||||
case 2 : args["NAME"] = av_name.mDisplayName; break;
|
||||
default : args["NAME"] = av_name.getCompleteName(); break;
|
||||
}
|
||||
|
||||
args["NAME"] = name;
|
||||
|
||||
// Popup a notify box with online status of this agent
|
||||
LLNotificationPtr notification = LLNotificationsUtil::add(online ? "FriendOnline" : "FriendOffline", args, payload);
|
||||
|
||||
|
||||
@@ -70,6 +70,8 @@ const LLColor4 INACTIVE_COLOR(0.3f, 0.3f, 0.3f, 0.5f);
|
||||
const LLColor4 ACTIVE_COLOR(0.5f, 0.5f, 0.5f, 1.f);
|
||||
const F32 TYPING_ANIMATION_FPS = 2.5f;
|
||||
|
||||
static void on_avatar_name_lookup(const LLUUID&, const LLAvatarName& avatar_name, std::string& mDisplayName);
|
||||
|
||||
LLSpeaker::LLSpeaker(const LLUUID& id, const std::string& name, const ESpeakerType type) :
|
||||
mStatus(LLSpeaker::STATUS_TEXT_ONLY),
|
||||
mLastSpokeTime(0.f),
|
||||
@@ -102,41 +104,22 @@ LLSpeaker::LLSpeaker(const LLUUID& id, const std::string& name, const ESpeakerTy
|
||||
|
||||
void LLSpeaker::lookupName()
|
||||
{
|
||||
// [Ansariel: Display name support]
|
||||
LLAvatarNameCache::get(mID, boost::bind(&LLSpeaker::onAvatarNameLookup, _1, _2, new LLHandle<LLSpeaker>(getHandle())));
|
||||
// [/Ansariel: Display name support]
|
||||
LLAvatarNameCache::get(mID, boost::bind(&on_avatar_name_lookup, _1, _2, boost::ref(mDisplayName)));
|
||||
|
||||
// Also set the legacy name. We will need it to initiate a new
|
||||
// IM session.
|
||||
gCacheName->getFullName(mID, mLegacyName);
|
||||
mLegacyName = LLCacheName::cleanFullName(mLegacyName);
|
||||
}
|
||||
|
||||
//static
|
||||
// [Ansariel: Display name support]
|
||||
void LLSpeaker::onAvatarNameLookup(const LLUUID& id, const LLAvatarName& avatar_name, void* user_data)
|
||||
// [/Ansariel: Display name support]
|
||||
static void on_avatar_name_lookup(const LLUUID&, const LLAvatarName& avatar_name, std::string& mDisplayName)
|
||||
{
|
||||
LLSpeaker* speaker_ptr = ((LLHandle<LLSpeaker>*)user_data)->get();
|
||||
delete (LLHandle<LLSpeaker>*)user_data;
|
||||
|
||||
if (speaker_ptr)
|
||||
{
|
||||
// [Ansariel: Display name support]
|
||||
switch (gSavedSettings.getS32("PhoenixNameSystem"))
|
||||
{
|
||||
case 0 : speaker_ptr->mDisplayName = avatar_name.getLegacyName(); break;
|
||||
case 1 : speaker_ptr->mDisplayName = (avatar_name.mIsDisplayNameDefault ? avatar_name.mDisplayName : avatar_name.getCompleteName()); break;
|
||||
case 2 : speaker_ptr->mDisplayName = avatar_name.mDisplayName; break;
|
||||
default : speaker_ptr->mDisplayName = avatar_name.getLegacyName(); break;
|
||||
}
|
||||
|
||||
// Also set the legacy name. We will need it to initiate a new
|
||||
// IM session.
|
||||
speaker_ptr->mLegacyName = LLCacheName::cleanFullName(avatar_name.getLegacyName());
|
||||
// [/Ansariel: Display name support]
|
||||
|
||||
LLAvatarNameCache::getPNSName(avatar_name, mDisplayName);
|
||||
// [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Added: RLVa-1.0.0g
|
||||
// TODO-RLVa: this seems to get called per frame which is very likely an LL bug that will eventuall get fixed
|
||||
if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES))
|
||||
speaker_ptr->mDisplayName = RlvStrings::getAnonym(speaker_ptr->mDisplayName);
|
||||
// TODO-RLVa: this seems to get called per frame which is very likely an LL bug that will eventually get fixed
|
||||
if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES))
|
||||
mDisplayName = RlvStrings::getAnonym(mDisplayName);
|
||||
// [/RLVa:KB]
|
||||
}
|
||||
}
|
||||
|
||||
LLSpeakerTextModerationEvent::LLSpeakerTextModerationEvent(LLSpeaker* source)
|
||||
|
||||
@@ -77,11 +77,6 @@ public:
|
||||
~LLSpeaker() {};
|
||||
void lookupName();
|
||||
|
||||
// [Ansariel: Display name support]
|
||||
//static void onAvatarNameLookup(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group, void* user_data);
|
||||
static void onAvatarNameLookup(const LLUUID& id, const LLAvatarName& avatar_name, void* user_data);
|
||||
// [/Ansariel: Display name support]
|
||||
|
||||
ESpeakerStatus mStatus; // current activity status in speech group
|
||||
F32 mLastSpokeTime; // timestamp when this speaker last spoke
|
||||
F32 mSpeechVolume; // current speech amplitude (timea average rms amplitude?)
|
||||
|
||||
@@ -83,6 +83,7 @@ typedef enum e_radar_alert_type
|
||||
|
||||
void chat_avatar_status(std::string name, LLUUID key, ERadarAlertType type, bool entering)
|
||||
{
|
||||
if(gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) return; //RLVa:LF Don't announce people are around when blind, that cheats the system.
|
||||
static LLCachedControl<bool> radar_chat_alerts(gSavedSettings, "RadarChatAlerts");
|
||||
if (!radar_chat_alerts) return;
|
||||
static LLCachedControl<bool> radar_alert_sim(gSavedSettings, "RadarAlertSim");
|
||||
@@ -462,8 +463,6 @@ void LLFloaterAvatarList::updateAvatarList()
|
||||
for (i = 0; i < count; ++i)
|
||||
{
|
||||
std::string name;
|
||||
std::string first;
|
||||
std::string last;
|
||||
const LLUUID &avid = avatar_ids[i];
|
||||
|
||||
LLVector3d position;
|
||||
@@ -483,29 +482,13 @@ void LLFloaterAvatarList::updateAvatarList()
|
||||
position = gAgent.getPosGlobalFromAgent(avatarp->getCharacterPosition());
|
||||
name = avatarp->getFullname();
|
||||
|
||||
// [Ansariel: Display name support]
|
||||
LLAvatarName avatar_name;
|
||||
if (LLAvatarNameCache::get(avatarp->getID(), &avatar_name))
|
||||
{
|
||||
static LLCachedControl<S32> phoenix_name_system("PhoenixNameSystem", 0);
|
||||
switch (phoenix_name_system)
|
||||
{
|
||||
case 0 : name = avatar_name.getLegacyName(); break;
|
||||
case 1 : name = (avatar_name.mIsDisplayNameDefault ? avatar_name.mDisplayName : avatar_name.getCompleteName()); break;
|
||||
case 2 : name = avatar_name.mDisplayName; break;
|
||||
default : name = avatar_name.getLegacyName(); break;
|
||||
}
|
||||
|
||||
first = avatar_name.mLegacyFirstName;
|
||||
last = avatar_name.mLegacyLastName;
|
||||
}
|
||||
else continue;
|
||||
// [/Ansariel: Display name support]
|
||||
if (!LLAvatarNameCache::getPNSName(avatarp->getID(), name))
|
||||
continue;
|
||||
|
||||
//duped for lower section
|
||||
if (name.empty() || (name.compare(" ") == 0))// || (name.compare(gCacheName->getDefaultName()) == 0))
|
||||
{
|
||||
if (!gCacheName->getFullName(avid, name)) //seems redudant with LLAvatarNameCache::get above...
|
||||
if (!gCacheName->getFullName(avid, name)) //seems redudant with LLAvatarNameCache::getPNSName above...
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@@ -545,7 +528,7 @@ void LLFloaterAvatarList::updateAvatarList()
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!gCacheName->getFullName(avid, name))
|
||||
if (!LLAvatarNameCache::getPNSName(avid, name))
|
||||
{
|
||||
//name = gCacheName->getDefaultName();
|
||||
continue; //prevent (Loading...)
|
||||
@@ -982,14 +965,12 @@ void LLFloaterAvatarList::onClickIM()
|
||||
// Single avatar
|
||||
LLUUID agent_id = ids[0];
|
||||
|
||||
// [Ansariel: Display name support]
|
||||
LLAvatarName avatar_name;
|
||||
if (LLAvatarNameCache::get(agent_id, &avatar_name))
|
||||
std::string avatar_name;
|
||||
if (gCacheName->getFullName(agent_id, avatar_name))
|
||||
{
|
||||
gIMMgr->setFloaterOpen(TRUE);
|
||||
gIMMgr->addSession(LLCacheName::cleanFullName(avatar_name.getLegacyName()),IM_NOTHING_SPECIAL,agent_id);
|
||||
gIMMgr->addSession(avatar_name,IM_NOTHING_SPECIAL,agent_id);
|
||||
}
|
||||
// [Ansariel: Display name support]
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1114,14 +1095,12 @@ BOOL LLFloaterAvatarList::handleKeyHere(KEY key, MASK mask)
|
||||
// Single avatar
|
||||
LLUUID agent_id = ids[0];
|
||||
|
||||
// [Ansariel: Display name support]
|
||||
LLAvatarName avatar_name;
|
||||
if (LLAvatarNameCache::get(agent_id, &avatar_name))
|
||||
std::string avatar_name;
|
||||
if (gCacheName->getFullName(agent_id, avatar_name))
|
||||
{
|
||||
gIMMgr->setFloaterOpen(TRUE);
|
||||
gIMMgr->addSession(LLCacheName::cleanFullName(avatar_name.getLegacyName()),IM_NOTHING_SPECIAL,agent_id);
|
||||
gIMMgr->addSession(avatar_name,IM_NOTHING_SPECIAL,agent_id);
|
||||
}
|
||||
// [Ansariel: Display name support]
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -33,24 +33,26 @@
|
||||
|
||||
#include "llfloateravatarpicker.h"
|
||||
|
||||
#include "message.h"
|
||||
|
||||
// Viewer includes
|
||||
#include "llagent.h"
|
||||
#include "llbutton.h"
|
||||
#include "llcachename.h"
|
||||
#include "llfocusmgr.h"
|
||||
#include "llfoldervieweventlistener.h"
|
||||
#include "llinventorypanel.h"
|
||||
#include "llinventorymodel.h"
|
||||
#include "llinventoryfunctions.h"
|
||||
#include "llinventorymodel.h"
|
||||
#include "llinventorypanel.h"
|
||||
#include "llviewercontrol.h"
|
||||
#include "llviewerregion.h"
|
||||
#include "llworld.h"
|
||||
|
||||
// Linden libraries
|
||||
#include "llavatarnamecache.h" // IDEVO
|
||||
#include "llbutton.h"
|
||||
#include "llcachename.h"
|
||||
#include "lllineeditor.h"
|
||||
#include "llscrolllistctrl.h"
|
||||
#include "lltextbox.h"
|
||||
#include "lluictrlfactory.h"
|
||||
#include "llviewercontrol.h"
|
||||
#include "llworld.h"
|
||||
#include "llviewerregion.h"
|
||||
#include "message.h"
|
||||
|
||||
// [RLVa:KB]
|
||||
#include "rlvhandler.h"
|
||||
|
||||
@@ -44,10 +44,7 @@
|
||||
#include "llagent.h"
|
||||
#include "llappviewer.h" // for gLastVersionChannel
|
||||
|
||||
// [Ansariel: Display name support]
|
||||
#include "llavatarname.h"
|
||||
#include "llavatarnamecache.h"
|
||||
// [/Ansariel: Display name support]
|
||||
|
||||
#include "llfloateravatarpicker.h"
|
||||
#include "llviewerwindow.h"
|
||||
@@ -437,26 +434,8 @@ BOOL LLPanelFriends::addFriend(const LLUUID& agent_id)
|
||||
bool isOnline = relationInfo->isOnline();
|
||||
|
||||
std::string fullname;
|
||||
// [Ansariel: Display name support]
|
||||
//BOOL have_name = gCacheName->getFullName(agent_id, fullname);
|
||||
LLAvatarName avatar_name;
|
||||
BOOL have_name;
|
||||
if (LLAvatarNameCache::get(agent_id, &avatar_name))
|
||||
{
|
||||
static const LLCachedControl<S32> phoenix_name_system("PhoenixNameSystem", 0);
|
||||
switch (phoenix_name_system)
|
||||
{
|
||||
case 0 : fullname = avatar_name.getLegacyName(); break;
|
||||
case 1 : fullname = (avatar_name.mIsDisplayNameDefault ? avatar_name.mDisplayName : avatar_name.getCompleteName()); break;
|
||||
case 2 : fullname = avatar_name.mDisplayName; break;
|
||||
default : fullname = avatar_name.getCompleteName(); break;
|
||||
}
|
||||
BOOL have_name = LLAvatarNameCache::getPNSName(agent_id, fullname);
|
||||
|
||||
have_name = TRUE;
|
||||
}
|
||||
else have_name = FALSE;
|
||||
// [/Ansariel: Display name support]
|
||||
|
||||
LLSD element;
|
||||
element["id"] = agent_id;
|
||||
LLSD& friend_column = element["columns"][LIST_FRIEND_NAME];
|
||||
@@ -536,26 +515,8 @@ BOOL LLPanelFriends::updateFriendItem(const LLUUID& agent_id, const LLRelationsh
|
||||
bool isOnlineSIP = LLVoiceClient::getInstance()->isOnlineSIP(itemp->getUUID());
|
||||
bool isOnline = info->isOnline();
|
||||
|
||||
std::string fullname;
|
||||
// [Ansariel: Display name support]
|
||||
//BOOL have_name = gCacheName->getFullName(agent_id, fullname);
|
||||
LLAvatarName avatar_name;
|
||||
BOOL have_name;
|
||||
if (LLAvatarNameCache::get(agent_id, &avatar_name))
|
||||
{
|
||||
static const LLCachedControl<S32> phoenix_name_system("PhoenixNameSystem", 0);
|
||||
switch (phoenix_name_system)
|
||||
{
|
||||
case 0 : fullname = avatar_name.getLegacyName(); break;
|
||||
case 1 : fullname = (avatar_name.mIsDisplayNameDefault ? avatar_name.mDisplayName : avatar_name.getCompleteName()); break;
|
||||
case 2 : fullname = avatar_name.mDisplayName; break;
|
||||
default : fullname = avatar_name.getCompleteName(); break;
|
||||
}
|
||||
|
||||
have_name = TRUE;
|
||||
}
|
||||
else have_name = FALSE;
|
||||
// [/Ansariel: Display name support]
|
||||
std::string fullname;
|
||||
BOOL have_name = LLAvatarNameCache::getPNSName(agent_id, fullname);
|
||||
|
||||
// Name of the status icon to use
|
||||
std::string statusIcon;
|
||||
@@ -898,20 +859,12 @@ void LLPanelFriends::onClickIM(void* user_data)
|
||||
{
|
||||
LLUUID agent_id = ids[0];
|
||||
const LLRelationship* info = LLAvatarTracker::instance().getBuddyInfo(agent_id);
|
||||
// [Ansariel: Display name support]
|
||||
//std::string fullname;
|
||||
//if(info && gCacheName->getFullName(agent_id, fullname))
|
||||
//{
|
||||
// gIMMgr->setFloaterOpen(TRUE);
|
||||
// gIMMgr->addSession(fullname, IM_NOTHING_SPECIAL, agent_id);
|
||||
//}
|
||||
LLAvatarName avatar_name;
|
||||
if (info && LLAvatarNameCache::get(agent_id, &avatar_name))
|
||||
std::string fullname;
|
||||
if(info && gCacheName->getFullName(agent_id, fullname))
|
||||
{
|
||||
gIMMgr->setFloaterOpen(TRUE);
|
||||
gIMMgr->addSession(LLCacheName::cleanFullName(avatar_name.getLegacyName()),IM_NOTHING_SPECIAL,agent_id);
|
||||
gIMMgr->addSession(fullname, IM_NOTHING_SPECIAL, agent_id);
|
||||
}
|
||||
// [/Ansariel: Display name support]
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1027,30 +980,9 @@ void LLPanelFriends::onClickRemove(void* user_data)
|
||||
if(ids.size() == 1)
|
||||
{
|
||||
LLUUID agent_id = ids[0];
|
||||
// [Ansariel: Display name support]
|
||||
//std::string first, last;
|
||||
//if(gCacheName->getName(agent_id, first, last))
|
||||
//{
|
||||
// args["FIRST_NAME"] = first;
|
||||
// args["LAST_NAME"] = last;
|
||||
//}
|
||||
|
||||
LLAvatarName avatar_name;
|
||||
if (LLAvatarNameCache::get(agent_id, &avatar_name))
|
||||
{
|
||||
std::string fullname;
|
||||
static const LLCachedControl<S32> phoenix_name_system("PhoenixNameSystem", 0);
|
||||
switch (phoenix_name_system)
|
||||
{
|
||||
case 0 : fullname = avatar_name.getLegacyName(); break;
|
||||
case 1 : fullname = (avatar_name.mIsDisplayNameDefault ? avatar_name.mDisplayName : avatar_name.getCompleteName()); break;
|
||||
case 2 : fullname = avatar_name.mDisplayName; break;
|
||||
default : fullname = avatar_name.getCompleteName(); break;
|
||||
}
|
||||
|
||||
std::string fullname;
|
||||
if (LLAvatarNameCache::getPNSName(agent_id, fullname))
|
||||
args["NAME"] = fullname;
|
||||
}
|
||||
// [/Ansariel: Display name support]
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1294,28 +1226,9 @@ void LLPanelFriends::confirmModifyRights(rights_map_t& ids, EGrantRevoke command
|
||||
if(ids.size() == 1)
|
||||
{
|
||||
LLUUID agent_id = ids.begin()->first;
|
||||
//std::string first, last;
|
||||
//if(gCacheName->getName(agent_id, first, last))
|
||||
//{
|
||||
// args["FIRST_NAME"] = first;
|
||||
// args["LAST_NAME"] = last;
|
||||
//}
|
||||
|
||||
LLAvatarName avatar_name;
|
||||
if (LLAvatarNameCache::get(agent_id, &avatar_name))
|
||||
{
|
||||
std::string fullname;
|
||||
static const LLCachedControl<S32> phoenix_name_system("PhoenixNameSystem", 0);
|
||||
switch (phoenix_name_system)
|
||||
{
|
||||
case 0 : fullname = avatar_name.getLegacyName(); break;
|
||||
case 1 : fullname = (avatar_name.mIsDisplayNameDefault ? avatar_name.mDisplayName : avatar_name.getCompleteName()); break;
|
||||
case 2 : fullname = avatar_name.mDisplayName; break;
|
||||
default : fullname = avatar_name.getCompleteName(); break;
|
||||
}
|
||||
|
||||
std::string fullname;
|
||||
if (LLAvatarNameCache::getPNSName(agent_id, fullname))
|
||||
args["NAME"] = fullname;
|
||||
}
|
||||
|
||||
if (command == GRANT)
|
||||
{
|
||||
|
||||
@@ -277,6 +277,8 @@ BOOL LLFloaterTools::postBuild()
|
||||
mComboGridMode = getChild<LLComboBox>("combobox grid mode");
|
||||
childSetCommitCallback("combobox grid mode",commit_grid_mode, this);
|
||||
|
||||
mCheckShowHighlight = getChild<LLCheckBoxCtrl>("checkbox show highlight");
|
||||
mCheckActualRoot = getChild<LLCheckBoxCtrl>("checkbox actual root");
|
||||
//
|
||||
// Create Buttons
|
||||
//
|
||||
@@ -382,6 +384,8 @@ LLFloaterTools::LLFloaterTools()
|
||||
mCheckStretchUniform(NULL),
|
||||
mCheckStretchTexture(NULL),
|
||||
mCheckLimitDrag(NULL),
|
||||
mCheckShowHighlight(NULL),
|
||||
mCheckActualRoot(NULL),
|
||||
|
||||
mBtnRotateLeft(NULL),
|
||||
mBtnRotateReset(NULL),
|
||||
@@ -712,6 +716,8 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
|
||||
if (mCheckStretchUniform) mCheckStretchUniform->setVisible( edit_visible );
|
||||
if (mCheckStretchTexture) mCheckStretchTexture->setVisible( edit_visible );
|
||||
if (mCheckLimitDrag) mCheckLimitDrag->setVisible( edit_visible );
|
||||
if (mCheckShowHighlight) mCheckShowHighlight->setVisible(edit_visible);
|
||||
if (mCheckActualRoot) mCheckActualRoot->setVisible(edit_visible);
|
||||
|
||||
// Create buttons
|
||||
BOOL create_visible = (tool == LLToolCompCreate::getInstance());
|
||||
|
||||
@@ -143,6 +143,8 @@ public:
|
||||
LLCheckBoxCtrl* mCheckStretchUniform;
|
||||
LLCheckBoxCtrl* mCheckStretchTexture;
|
||||
LLCheckBoxCtrl* mCheckLimitDrag;
|
||||
LLCheckBoxCtrl* mCheckShowHighlight;
|
||||
LLCheckBoxCtrl* mCheckActualRoot;
|
||||
|
||||
|
||||
LLButton *mBtnRotateLeft;
|
||||
|
||||
@@ -77,7 +77,7 @@ public:
|
||||
virtual BOOL copyToClipboard() const = 0;
|
||||
virtual void cutToClipboard() = 0;
|
||||
virtual BOOL isClipboardPasteable() const = 0;
|
||||
virtual void pasteFromClipboard() = 0;
|
||||
virtual void pasteFromClipboard(bool only_copies = false) = 0;
|
||||
virtual void pasteLinkFromClipboard() = 0;
|
||||
virtual void buildContextMenu(LLMenuGL& menu, U32 flags) = 0;
|
||||
virtual BOOL isUpToDate() const = 0;
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
|
||||
#include "llappviewer.h" //For gFrameCount
|
||||
#include "llagent.h"
|
||||
#include "llui.h"
|
||||
#include "message.h"
|
||||
@@ -44,6 +45,7 @@
|
||||
#include "llstatusbar.h"
|
||||
#include "lleconomy.h"
|
||||
#include "llviewercontrol.h"
|
||||
#include "llviewerregion.h"
|
||||
#include "llviewerwindow.h"
|
||||
#include "llfloaterdirectory.h"
|
||||
#include "llfloatergroupinfo.h"
|
||||
@@ -821,6 +823,7 @@ void LLGroupMgrGroupData::cancelRoleChanges()
|
||||
|
||||
LLGroupMgr::LLGroupMgr()
|
||||
{
|
||||
mLastGroupMembersRequestFrame = 0;
|
||||
}
|
||||
|
||||
LLGroupMgr::~LLGroupMgr()
|
||||
@@ -1885,6 +1888,187 @@ void LLGroupMgr::sendGroupMemberEjects(const LLUUID& group_id,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class AIHTTPTimeoutPolicy;
|
||||
extern AIHTTPTimeoutPolicy groupMemberDataResponder_timeout;
|
||||
|
||||
// Responder class for capability group management
|
||||
class GroupMemberDataResponder : public LLHTTPClient::ResponderWithResult
|
||||
{
|
||||
public:
|
||||
virtual AIHTTPTimeoutPolicy const& getHTTPTimeoutPolicy(void) const { return groupMemberDataResponder_timeout; }
|
||||
|
||||
GroupMemberDataResponder() {}
|
||||
virtual ~GroupMemberDataResponder() {}
|
||||
virtual void result(const LLSD& pContent);
|
||||
virtual void error(U32 pStatus, const std::string& pReason);
|
||||
private:
|
||||
LLSD mMemberData;
|
||||
};
|
||||
|
||||
void GroupMemberDataResponder::error(U32 pStatus, const std::string& pReason)
|
||||
{
|
||||
LL_WARNS("GrpMgr") << "Error receiving group member data." << LL_ENDL;
|
||||
}
|
||||
|
||||
void GroupMemberDataResponder::result(const LLSD& content)
|
||||
{
|
||||
LLGroupMgr::processCapGroupMembersRequest(content);
|
||||
}
|
||||
|
||||
|
||||
// static
|
||||
void LLGroupMgr::sendCapGroupMembersRequest(const LLUUID& group_id)
|
||||
{
|
||||
// Have we requested the information already this frame?
|
||||
if (mLastGroupMembersRequestFrame == gFrameCount)
|
||||
return;
|
||||
|
||||
LLViewerRegion* currentRegion = gAgent.getRegion();
|
||||
// Thank you FS:Ansariel!
|
||||
if (!currentRegion)
|
||||
{
|
||||
LL_WARNS("GrpMgr") << "Agent does not have a current region. Uh-oh!" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
// Check to make sure we have our capabilities
|
||||
if (!currentRegion->capabilitiesReceived())
|
||||
{
|
||||
LL_WARNS("GrpMgr") << " Capabilities not received!" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
// Get our capability
|
||||
std::string cap_url = currentRegion->getCapability("GroupMemberData");
|
||||
|
||||
// Thank you FS:Ansariel!
|
||||
if (cap_url.empty())
|
||||
{
|
||||
LL_INFOS("GrpMgr") << "Region has no GroupMemberData capability. Falling back to UDP fetch." << LL_ENDL;
|
||||
sendGroupMembersRequest(group_id);
|
||||
return;
|
||||
}
|
||||
|
||||
// Post to our service. Add a body containing the group_id.
|
||||
LLSD body = LLSD::emptyMap();
|
||||
body["group_id"] = group_id;
|
||||
|
||||
LLHTTPClient::ResponderPtr grp_data_responder = new GroupMemberDataResponder();
|
||||
|
||||
// This could take a while to finish, timeout after 5 minutes.
|
||||
LLHTTPClient::post(cap_url, body, grp_data_responder);
|
||||
|
||||
mLastGroupMembersRequestFrame = gFrameCount;
|
||||
}
|
||||
|
||||
// static
|
||||
void LLGroupMgr::processCapGroupMembersRequest(const LLSD& content)
|
||||
{
|
||||
// Did we get anything in content?
|
||||
if (!content.size())
|
||||
{
|
||||
LL_DEBUGS("GrpMgr") << "No group member data received." << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
// If we have no members, there's no reason to do anything else
|
||||
S32 num_members = content["member_count"];
|
||||
if (num_members < 1)
|
||||
return;
|
||||
|
||||
LLUUID group_id = content["group_id"].asUUID();
|
||||
|
||||
LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->getGroupData(group_id);
|
||||
if (!group_datap)
|
||||
{
|
||||
LL_WARNS("GrpMgr") << "Received incorrect, possibly stale, group or request id" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
group_datap->mMemberCount = num_members;
|
||||
|
||||
LLSD member_list = content["members"];
|
||||
LLSD titles = content["titles"];
|
||||
LLSD defaults = content["defaults"];
|
||||
|
||||
std::string online_status;
|
||||
std::string title;
|
||||
S32 contribution;
|
||||
U64 member_powers;
|
||||
// If this is changed to a bool, make sure to change the LLGroupMemberData constructor
|
||||
BOOL is_owner;
|
||||
|
||||
// Compute this once, rather than every time.
|
||||
U64 default_powers = llstrtou64(defaults["default_powers"].asString().c_str(), NULL, 16);
|
||||
|
||||
LLSD::map_const_iterator member_iter_start = member_list.beginMap();
|
||||
LLSD::map_const_iterator member_iter_end = member_list.endMap();
|
||||
for ( ; member_iter_start != member_iter_end; ++member_iter_start)
|
||||
{
|
||||
// Reset defaults
|
||||
online_status = "unknown";
|
||||
title = titles[0].asString();
|
||||
contribution = 0;
|
||||
member_powers = default_powers;
|
||||
is_owner = false;
|
||||
|
||||
const LLUUID member_id(member_iter_start->first);
|
||||
LLSD member_info = member_iter_start->second;
|
||||
|
||||
if (member_info.has("last_login"))
|
||||
{
|
||||
online_status = member_info["last_login"].asString();
|
||||
if (online_status == "Online")
|
||||
online_status = LLTrans::getString("group_member_status_online");
|
||||
else
|
||||
formatDateString(online_status);
|
||||
}
|
||||
|
||||
if (member_info.has("title"))
|
||||
title = titles[member_info["title"].asInteger()].asString();
|
||||
|
||||
if (member_info.has("powers"))
|
||||
member_powers = llstrtou64(member_info["powers"].asString().c_str(), NULL, 16);
|
||||
|
||||
if (member_info.has("donated_square_meters"))
|
||||
contribution = member_info["donated_square_meters"];
|
||||
|
||||
if (member_info.has("owner"))
|
||||
is_owner = true;
|
||||
|
||||
LLGroupMemberData* data = new LLGroupMemberData(member_id,
|
||||
contribution,
|
||||
member_powers,
|
||||
title,
|
||||
online_status,
|
||||
is_owner);
|
||||
|
||||
group_datap->mMembers[member_id] = data;
|
||||
}
|
||||
|
||||
// Technically, we have this data, but to prevent completely overhauling
|
||||
// this entire system (it would be nice, but I don't have the time),
|
||||
// I'm going to be dumb and just call services I most likely don't need
|
||||
// with the thought being that the system might need it to be done.
|
||||
//
|
||||
// TODO: Refactor to reduce multiple calls for data we already have.
|
||||
if (group_datap->mTitles.size() < 1)
|
||||
LLGroupMgr::getInstance()->sendGroupTitlesRequest(group_id);
|
||||
|
||||
group_datap->mMemberDataComplete = TRUE;
|
||||
group_datap->mMemberRequestID.setNull();
|
||||
// Make the role-member data request
|
||||
if (group_datap->mPendingRoleMemberRequest)
|
||||
{
|
||||
group_datap->mPendingRoleMemberRequest = FALSE;
|
||||
LLGroupMgr::getInstance()->sendGroupRoleMembersRequest(group_id);
|
||||
}
|
||||
|
||||
group_datap->mChanged = TRUE;
|
||||
LLGroupMgr::getInstance()->notifyObservers(GC_MEMBER_DATA);
|
||||
}
|
||||
|
||||
void LLGroupMgr::sendGroupRoleChanges(const LLUUID& group_id)
|
||||
{
|
||||
lldebugs << "LLGroupMgr::sendGroupRoleChanges" << llendl;
|
||||
|
||||
@@ -335,6 +335,9 @@ public:
|
||||
static void sendGroupMemberEjects(const LLUUID& group_id,
|
||||
uuid_vec_t& member_ids);
|
||||
|
||||
void sendCapGroupMembersRequest(const LLUUID& group_id);
|
||||
static void processCapGroupMembersRequest(const LLSD& content);
|
||||
|
||||
void cancelGroupRoleChanges(const LLUUID& group_id);
|
||||
|
||||
static void processGroupPropertiesReply(LLMessageSystem* msg, void** data);
|
||||
@@ -370,6 +373,8 @@ private:
|
||||
typedef std::set<LLParticularGroupObserver*> observer_set_t;
|
||||
typedef std::map<LLUUID,observer_set_t> observer_map_t;
|
||||
observer_map_t mParticularObservers;
|
||||
|
||||
S32 mLastGroupMembersRequestFrame;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -262,39 +262,16 @@ void LLHoverView::updateText()
|
||||
else
|
||||
{
|
||||
// [/RLVa:KB]
|
||||
|
||||
// [Ansariel: Display name support]
|
||||
std::string complete_name = firstname->getString();
|
||||
complete_name += " ";
|
||||
complete_name += lastname->getString();
|
||||
|
||||
if (LLAvatarNameCache::useDisplayNames())
|
||||
{
|
||||
LLAvatarName avatar_name;
|
||||
if (LLAvatarNameCache::get(hit_object->getID(), &avatar_name))
|
||||
{
|
||||
static const LLCachedControl<S32> phoenix_name_system("PhoenixNameSystem", 0);
|
||||
if (phoenix_name_system == 2 || (phoenix_name_system == 1 && avatar_name.mIsDisplayNameDefault))
|
||||
{
|
||||
complete_name = avatar_name.mDisplayName;
|
||||
}
|
||||
else
|
||||
{
|
||||
complete_name = avatar_name.getCompleteName();
|
||||
}
|
||||
}
|
||||
}
|
||||
// [/Ansariel: Display name support]
|
||||
std::string complete_name;
|
||||
if (!LLAvatarNameCache::getPNSName(hit_object->getID(), complete_name))
|
||||
complete_name = firstname->getString() + std::string(" ") + lastname->getString();
|
||||
|
||||
if (title)
|
||||
{
|
||||
line.append(title->getString());
|
||||
line.append(1, ' ');
|
||||
}
|
||||
|
||||
// [Ansariel: Display name support]
|
||||
line += complete_name;
|
||||
// [/Ansariel: Display name support]
|
||||
|
||||
// [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e)
|
||||
}
|
||||
@@ -347,27 +324,13 @@ void LLHoverView::updateText()
|
||||
std::string name;
|
||||
if (!nodep->mPermissions->isGroupOwned())
|
||||
{
|
||||
// [Ansariel: Display name support]
|
||||
LLAvatarName avatar_name;
|
||||
// [/Ansariel: Display name support]
|
||||
owner = nodep->mPermissions->getOwner();
|
||||
if (LLUUID::null == owner)
|
||||
{
|
||||
line.append(LLTrans::getString("TooltipPublic"));
|
||||
}
|
||||
// [Ansariel: Display name support]
|
||||
//else if(gCacheName->getFullName(owner, name))
|
||||
else if (LLAvatarNameCache::get(owner, &avatar_name))
|
||||
else if(LLAvatarNameCache::getPNSName(owner, name))
|
||||
{
|
||||
static const LLCachedControl<S32> phoenix_name_system("PhoenixNameSystem", 0);
|
||||
switch (phoenix_name_system)
|
||||
{
|
||||
case 0 : name = avatar_name.getCompleteName(); break;
|
||||
case 1 : name = (avatar_name.mIsDisplayNameDefault ? avatar_name.mDisplayName : avatar_name.getCompleteName()); break;
|
||||
case 2 : name = avatar_name.mDisplayName; break;
|
||||
default : name = avatar_name.getCompleteName(); break;
|
||||
}
|
||||
// [/Ansariel: Display name support]
|
||||
// [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e)
|
||||
if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES))
|
||||
{
|
||||
|
||||
@@ -1297,27 +1297,23 @@ void LLFloaterIMPanel::init(const std::string& session_label)
|
||||
}
|
||||
}
|
||||
|
||||
// [Ansariel: Display name support]
|
||||
void LLFloaterIMPanel::lookupName()
|
||||
{
|
||||
LLAvatarNameCache::get(mOtherParticipantUUID, boost::bind(&LLFloaterIMPanel::onAvatarNameLookup, _1, _2, this));
|
||||
}
|
||||
|
||||
//static
|
||||
void LLFloaterIMPanel::onAvatarNameLookup(const LLUUID& id, const LLAvatarName& avatar_name, void* user_data)
|
||||
void LLFloaterIMPanel::onAvatarNameLookup(const LLUUID&, const LLAvatarName& avatar_name, void* data)
|
||||
{
|
||||
LLFloaterIMPanel* self = (LLFloaterIMPanel*)user_data;
|
||||
LLFloaterIMPanel* self = (LLFloaterIMPanel*)data;
|
||||
|
||||
if (self && sFloaterIMPanels.count(self) != 0)
|
||||
{
|
||||
std::string title = avatar_name.getCompleteName();
|
||||
if (!title.empty())
|
||||
{
|
||||
self->setTitle(title);
|
||||
}
|
||||
std::string title;
|
||||
LLAvatarNameCache::getPNSName(avatar_name, title);
|
||||
self->setTitle(title);
|
||||
}
|
||||
}
|
||||
// [/Ansariel: Display name support]
|
||||
|
||||
LLFloaterIMPanel::~LLFloaterIMPanel()
|
||||
{
|
||||
@@ -1676,19 +1672,8 @@ void LLFloaterIMPanel::addHistoryLine(const std::string &utf8msg, LLColor4 incol
|
||||
else
|
||||
{
|
||||
std::string show_name = name;
|
||||
LLAvatarName avatar_name;
|
||||
if (source.notNull() &&
|
||||
LLAvatarNameCache::get(source, &avatar_name))
|
||||
{
|
||||
static const LLCachedControl<S32> phoenix_name_system("PhoenixNameSystem", 0);
|
||||
switch (phoenix_name_system)
|
||||
{
|
||||
case 0 : show_name = avatar_name.getCompleteName(); break;
|
||||
case 1 : show_name = (avatar_name.mIsDisplayNameDefault ? avatar_name.mDisplayName : avatar_name.getCompleteName()); break;
|
||||
case 2 : show_name = avatar_name.mDisplayName; break;
|
||||
default : show_name = avatar_name.getCompleteName(); break;
|
||||
}
|
||||
}
|
||||
if (source.notNull())
|
||||
LLAvatarNameCache::getPNSName(source, show_name);
|
||||
// Convert the name to a hotlink and add to message.
|
||||
const LLStyleSP &source_style = LLStyleMap::instance().lookupAgent(source);
|
||||
mHistoryEditor->appendStyledText(show_name,false,prepend_newline,source_style);
|
||||
|
||||
@@ -196,10 +196,8 @@ public:
|
||||
EInstantMessage dialog);
|
||||
virtual ~LLFloaterIMPanel();
|
||||
|
||||
// [Ansariel: Display name support]
|
||||
void lookupName();
|
||||
static void onAvatarNameLookup(const LLUUID& id, const LLAvatarName& avatar_name, void* user_data);
|
||||
// [/Ansariel: Display name support]
|
||||
static void onAvatarNameLookup(const LLUUID&, const LLAvatarName& avatar_name, void* data);
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
@@ -400,7 +398,6 @@ private:
|
||||
typedef std::map<LLUUID, LLStyleSP> styleMap;
|
||||
static styleMap mStyleMap;
|
||||
|
||||
// [Ansariel: Display name support]
|
||||
static std::set<LLFloaterIMPanel*> sFloaterIMPanels;
|
||||
};
|
||||
|
||||
|
||||
@@ -612,6 +612,48 @@ BOOL LLInvFVBridge::isClipboardPasteable() const
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool LLInvFVBridge::isClipboardPasteableAsCopy() const
|
||||
{
|
||||
// In cut mode, we don't paste copies.
|
||||
if (LLInventoryClipboard::instance().isCutMode())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
LLInventoryModel* model = getInventoryModel();
|
||||
if (!model)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// In copy mode, we need to check each element of the clipboard to know if it's a link
|
||||
LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get());
|
||||
LLDynamicArray<LLUUID> objects;
|
||||
LLInventoryClipboard::instance().retrieve(objects);
|
||||
const S32 count = objects.count();
|
||||
for(S32 i = 0; i < count; i++)
|
||||
{
|
||||
const LLUUID &item_id = objects.get(i);
|
||||
|
||||
// Folders may be links
|
||||
const LLInventoryCategory *cat = model->getCategory(item_id);
|
||||
if (cat)
|
||||
{
|
||||
const LLFolderBridge cat_br(panel, mRoot, item_id);
|
||||
if (cat_br.isLink())
|
||||
return true;
|
||||
// Skip to the next item in the clipboard
|
||||
continue;
|
||||
}
|
||||
|
||||
// May be link item
|
||||
const LLItemBridge item_br(panel, mRoot, item_id);
|
||||
if (item_br.isLink())
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
BOOL LLInvFVBridge::isClipboardPasteableAsLink() const
|
||||
{
|
||||
if (!InventoryLinksEnabled())
|
||||
@@ -731,6 +773,20 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id,
|
||||
{
|
||||
if (obj->getIsLinkType())
|
||||
{
|
||||
// Patch: Inventory-Links tweak, Can copy and cut Inventory Links
|
||||
items.push_back(std::string("Copy Separator"));
|
||||
|
||||
items.push_back(std::string("Copy"));
|
||||
if (!isItemCopyable())
|
||||
{
|
||||
disabled_items.push_back(std::string("Copy"));
|
||||
}
|
||||
|
||||
items.push_back(std::string("Cut"));
|
||||
if (!isItemMovable() || !isItemRemovable())
|
||||
{
|
||||
disabled_items.push_back(std::string("Cut"));
|
||||
}
|
||||
items.push_back(std::string("Find Original"));
|
||||
if (isLinkedObjectMissing())
|
||||
{
|
||||
@@ -802,10 +858,14 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id,
|
||||
if (!isCOFFolder() && !isInboxFolder() && !isOutboxFolder())
|
||||
{
|
||||
items.push_back(std::string("Paste"));
|
||||
// Paste as copy if we have links.
|
||||
if (InventoryLinksEnabled() && isClipboardPasteableAsCopy())
|
||||
items.push_back(std::string("Paste As Copy"));
|
||||
}
|
||||
if (!isClipboardPasteable() || ((flags & FIRST_SELECTED_ITEM) == 0))
|
||||
{
|
||||
disabled_items.push_back(std::string("Paste"));
|
||||
disabled_items.push_back(std::string("Paste As Copy"));
|
||||
}
|
||||
|
||||
if(InventoryLinksEnabled())
|
||||
@@ -1469,6 +1529,18 @@ void LLItemBridge::performAction(LLInventoryModel* model, std::string action)
|
||||
folder_view_itemp->getListener()->pasteFromClipboard();
|
||||
return;
|
||||
}
|
||||
else if ("paste_copies" == action)
|
||||
{
|
||||
// Single item only
|
||||
LLInventoryItem* itemp = model->getItem(mUUID);
|
||||
if (!itemp) return;
|
||||
|
||||
LLFolderViewItem* folder_view_itemp = mRoot->getItemByID(itemp->getParentUUID());
|
||||
if (!folder_view_itemp) return;
|
||||
|
||||
folder_view_itemp->getListener()->pasteFromClipboard(true);
|
||||
return;
|
||||
}
|
||||
else if ("paste_link" == action)
|
||||
{
|
||||
// Single item only
|
||||
@@ -1812,7 +1884,10 @@ BOOL LLItemBridge::removeItem()
|
||||
// we can't do this check because we may have items in a folder somewhere that is
|
||||
// not yet in memory, so we don't want false negatives. (If disabled, then we
|
||||
// know we only have links in the Outfits folder which we explicitly fetch.)
|
||||
if (!InventoryLinksEnabled())
|
||||
// [SL:KB] - Patch: Inventory-Links | Checked: 2010-06-01 (Catznip-2.2.0a) | Added: Catznip-2.0.1a
|
||||
// Users move folders around and reuse links that way... if we know something has links then it's just bad not to warn them :|
|
||||
// [/SL:KB]
|
||||
// if (!InventoryLinksEnabled())
|
||||
{
|
||||
if (!item->getIsLinkType())
|
||||
{
|
||||
@@ -1873,13 +1948,26 @@ BOOL LLItemBridge::isItemCopyable() const
|
||||
return FALSE;
|
||||
}*/
|
||||
|
||||
// You can never copy a link.
|
||||
if (item->getIsLinkType())
|
||||
// // You can never copy a link.
|
||||
// if (item->getIsLinkType())
|
||||
// [SL:KB] - Patch: Inventory-Links | Checked: 2010-04-12 (Catznip-2.2.0a) | Added: Catznip-2.0.0a
|
||||
// We'll allow copying a link if:
|
||||
// - its target is available
|
||||
// - it doesn't point to another link [see LLViewerInventoryItem::getLinkedItem() which returns NULL in that case]
|
||||
if (item->getIsLinkType() && !item->getLinkedItem())
|
||||
// [/SL:KB]
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return item->getPermissions().allowCopyBy(gAgent.getID()) || InventoryLinksEnabled();
|
||||
// [SL:KB] - Patch: Inventory-Links | Checked: 2010-04-12 (Catznip-2.2.0a) | Added: Catznip-2.0.0a
|
||||
// User can copy the item if:
|
||||
// - the item (or its target in the case of a link) is "copy"
|
||||
// - and/or if the item (or its target in the case of a link) has a linkable asset type
|
||||
// NOTE: we do *not* want to return TRUE on everything like LL seems to do in SL-2.1.0 because not all types are "linkable"
|
||||
return (item->getPermissions().allowCopyBy(gAgent.getID())) || (LLAssetType::lookupCanLink(item->getType()));
|
||||
// [/SL:KB]
|
||||
// return item->getPermissions().allowCopyBy(gAgent.getID()) || InventoryLinksEnabled();
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
@@ -2824,6 +2912,11 @@ void LLFolderBridge::performAction(LLInventoryModel* model, std::string action)
|
||||
pasteFromClipboard();
|
||||
return;
|
||||
}
|
||||
else if ("paste_copies" == action)
|
||||
{
|
||||
pasteFromClipboard(true);
|
||||
return;
|
||||
}
|
||||
else if ("paste_link" == action)
|
||||
{
|
||||
pasteLinkFromClipboard();
|
||||
@@ -3062,7 +3155,7 @@ bool LLFolderBridge::removeItemResponse(const LLSD& notification, const LLSD& re
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void LLFolderBridge::pasteFromClipboard()
|
||||
void LLFolderBridge::pasteFromClipboard(bool only_copies)
|
||||
{
|
||||
LLInventoryModel* model = getInventoryModel();
|
||||
if(model && isClipboardPasteable())
|
||||
@@ -3135,7 +3228,7 @@ void LLFolderBridge::pasteFromClipboard()
|
||||
dropToOutfit(item, move_is_into_current_outfit);
|
||||
}
|
||||
}
|
||||
else if(LLInventoryClipboard::instance().isCutMode())
|
||||
else if (!only_copies && LLInventoryClipboard::instance().isCutMode())
|
||||
{
|
||||
// Do a move to "paste" a "cut"
|
||||
// move_inventory_item() is not enough, as we have to update inventory locally too
|
||||
@@ -3160,6 +3253,11 @@ void LLFolderBridge::pasteFromClipboard()
|
||||
}
|
||||
else
|
||||
{
|
||||
if (only_copies)
|
||||
{
|
||||
item = model->getLinkedItem(item_id);
|
||||
obj = model->getObject(item->getUUID());
|
||||
}
|
||||
// Do a "copy" to "paste" a regular copy clipboard
|
||||
if (LLAssetType::AT_CATEGORY == obj->getType())
|
||||
{
|
||||
@@ -3170,6 +3268,19 @@ void LLFolderBridge::pasteFromClipboard()
|
||||
copy_inventory_category(model, vicat, parent_id);
|
||||
}
|
||||
}
|
||||
// [SL:KB] - Patch: Inventory-Links | Checked: 2010-04-12 (Catznip-2.2.0a) | Added: Catznip-2.0.0a
|
||||
else if (!only_copies && LLAssetType::lookupIsLinkType(item->getActualType()))
|
||||
{
|
||||
link_inventory_item(
|
||||
gAgent.getID(),
|
||||
item->getLinkedUUID(),
|
||||
parent_id,
|
||||
item->getName(),
|
||||
item->getDescription(),
|
||||
item->getActualType(),
|
||||
LLPointer<LLInventoryCallback>(NULL));
|
||||
}
|
||||
// [/SL:KB]
|
||||
else
|
||||
{
|
||||
copy_inventory_item(
|
||||
|
||||
@@ -108,8 +108,9 @@ public:
|
||||
virtual BOOL copyToClipboard() const;
|
||||
virtual void cutToClipboard();
|
||||
virtual BOOL isClipboardPasteable() const;
|
||||
bool isClipboardPasteableAsCopy() const;
|
||||
virtual BOOL isClipboardPasteableAsLink() const;
|
||||
virtual void pasteFromClipboard() {}
|
||||
virtual void pasteFromClipboard(bool only_copies = false) {}
|
||||
virtual void pasteLinkFromClipboard() {}
|
||||
void getClipboardEntries(bool show_asset_id, menuentry_vec_t &items,
|
||||
menuentry_vec_t &disabled_items, U32 flags);
|
||||
@@ -261,7 +262,7 @@ public:
|
||||
BOOL removeSystemFolder();
|
||||
bool removeItemResponse(const LLSD& notification, const LLSD& response);
|
||||
|
||||
virtual void pasteFromClipboard();
|
||||
virtual void pasteFromClipboard(bool only_copies = false);
|
||||
virtual void pasteLinkFromClipboard();
|
||||
virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
|
||||
virtual BOOL hasChildren() const;
|
||||
|
||||
@@ -74,8 +74,7 @@ static std::string getMarketplaceDomain()
|
||||
// SecondLife(tm) BETA grid.
|
||||
// Using the login URI is a bit of a kludge, but it's the best we've got at the moment.
|
||||
domain = utf8str_tolower(getLoginUriDomain()); // <gridid>.lindenlab.com; ie, "aditi.lindenlab.com".
|
||||
std::string::size_type len = domain.length();
|
||||
llassert(len > 14 && domain.substr(len - 14) == ".lindenlab.com");
|
||||
llassert(domain.length() > 14 && domain.substr(domain.length() - 14) == ".lindenlab.com");
|
||||
if (domain == "damballah.lindenlab.com")
|
||||
{
|
||||
domain = "secondlife-staging.com";
|
||||
|
||||
@@ -629,37 +629,11 @@ BOOL LLNetMap::handleToolTip( S32 x, S32 y, std::string& msg, LLRect* sticky_rec
|
||||
{
|
||||
msg.assign("");
|
||||
std::string fullname;
|
||||
if(mClosestAgentToCursor.notNull() && gCacheName->getFullName(mClosestAgentToCursor, fullname))
|
||||
if(mClosestAgentToCursor.notNull() && LLAvatarNameCache::getPNSName(mClosestAgentToCursor, fullname))
|
||||
{
|
||||
//msg.append(fullname);
|
||||
// [RLVa:KB] - Version: 1.23.4 | Checked: 2009-07-08 (RLVa-1.0.0e) | Modified: RLVa-0.2.0b
|
||||
// [Ansariel: Display name support]
|
||||
// msg.append( (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) ? fullname : RlvStrings::getAnonym(fullname) );
|
||||
if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES))
|
||||
{
|
||||
msg.append(RlvStrings::getAnonym(fullname));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (LLAvatarNameCache::useDisplayNames())
|
||||
{
|
||||
LLAvatarName avatar_name;
|
||||
if (LLAvatarNameCache::get(mClosestAgentToCursor, &avatar_name))
|
||||
{
|
||||
static const LLCachedControl<S32> phoenix_name_system("PhoenixNameSystem", 0);
|
||||
if (phoenix_name_system == 2 || (phoenix_name_system == 1 && avatar_name.mIsDisplayNameDefault))
|
||||
{
|
||||
fullname = avatar_name.mDisplayName;
|
||||
}
|
||||
else
|
||||
{
|
||||
fullname = avatar_name.getCompleteName(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
msg.append(fullname);
|
||||
}
|
||||
// [/Ansariel: Display name support]
|
||||
msg.append( (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) ? fullname : RlvStrings::getAnonym(fullname) );
|
||||
// [/RLVa:KB]
|
||||
msg.append("\n");
|
||||
|
||||
|
||||
@@ -167,21 +167,9 @@ void LLPanelAvatarSecondLife::updatePartnerName()
|
||||
{
|
||||
if (mPartnerID.notNull())
|
||||
{
|
||||
// [Ansariel: Display name support]
|
||||
LLAvatarName avatar_name;
|
||||
if (LLAvatarNameCache::get(mPartnerID, &avatar_name))
|
||||
{
|
||||
std::string name;
|
||||
switch (gSavedSettings.getS32("PhoenixNameSystem"))
|
||||
{
|
||||
case 0 : name = avatar_name.getLegacyName(); break;
|
||||
case 1 : name = (avatar_name.mIsDisplayNameDefault ? avatar_name.mDisplayName : avatar_name.getCompleteName()); break;
|
||||
case 2 : name = avatar_name.mDisplayName; break;
|
||||
default : name = avatar_name.getLegacyName(); break;
|
||||
}
|
||||
std::string name;
|
||||
if (LLAvatarNameCache::getPNSName(mPartnerID, name))
|
||||
childSetTextArg("partner_edit", "[NAME]", name);
|
||||
}
|
||||
// [/Ansariel: Display name support]
|
||||
childSetEnabled("partner_info", TRUE);
|
||||
}
|
||||
}
|
||||
@@ -202,9 +190,7 @@ void LLPanelAvatarSecondLife::clearControls()
|
||||
childSetValue("born", "");
|
||||
childSetValue("acct", "");
|
||||
|
||||
// [Ansariel: Display name support]
|
||||
childSetTextArg("partner_edit", "[NAME]", LLStringUtil::null);
|
||||
// [/Ansariel: Display name support]
|
||||
|
||||
mPartnerID = LLUUID::null;
|
||||
|
||||
|
||||
@@ -70,8 +70,10 @@ BOOL LLPanelGeneral::postBuild()
|
||||
childSetValue("show_my_name_checkbox", gSavedSettings.getBOOL("RenderNameHideSelf"));
|
||||
childSetValue("small_avatar_names_checkbox", gSavedSettings.getBOOL("SmallAvatarNames"));
|
||||
childSetValue("show_my_title_checkbox", gSavedSettings.getBOOL("RenderHideGroupTitle"));
|
||||
childSetValue("away_when_idle_checkbox", gSavedSettings.getBOOL("AllowIdleAFK"));
|
||||
childSetValue("afk_timeout_spinner", gSavedSettings.getF32("AFKTimeout"));
|
||||
childSetValue("notify_money_change_checkbox", gSavedSettings.getBOOL("NotifyMoneyChange"));
|
||||
childSetValue("no_transaction_clutter_checkbox", gSavedSettings.getBOOL("LiruNoTransactionClutter"));
|
||||
|
||||
|
||||
|
||||
@@ -111,6 +113,12 @@ BOOL LLPanelGeneral::postBuild()
|
||||
childSetVisible("maturity_desired_combobox", can_choose);
|
||||
childSetVisible("maturity_desired_textbox", !can_choose);
|
||||
|
||||
childSetEnabled("afk_timeout_spinner", gSavedSettings.getBOOL("AllowIdleAFK"));
|
||||
childSetCommitCallback("away_when_idle_checkbox", &onClickCheckbox, this);
|
||||
|
||||
childSetEnabled("no_transaction_clutter_checkbox", gSavedSettings.getBOOL("NotifyMoneyChange"));
|
||||
childSetCommitCallback("notify_money_change_checkbox", &onClickCheckbox, this);
|
||||
|
||||
childSetAction("clear_settings", &onClickClearSettings, this);
|
||||
|
||||
return TRUE;
|
||||
@@ -145,8 +153,10 @@ void LLPanelGeneral::apply()
|
||||
gSavedSettings.setBOOL("RenderNameHideSelf", childGetValue("show_my_name_checkbox"));
|
||||
gSavedSettings.setBOOL("SmallAvatarNames", childGetValue("small_avatar_names_checkbox"));
|
||||
gSavedSettings.setBOOL("RenderHideGroupTitle", childGetValue("show_my_title_checkbox"));
|
||||
gSavedSettings.setBOOL("AllowIdleAFK", childGetValue("away_when_idle_checkbox"));
|
||||
gSavedSettings.setF32("AFKTimeout", childGetValue("afk_timeout_spinner").asReal());
|
||||
gSavedSettings.setBOOL("NotifyMoneyChange", childGetValue("notify_money_change_checkbox"));
|
||||
gSavedSettings.setBOOL("LiruNoTransactionClutter", childGetValue("no_transaction_clutter_checkbox"));
|
||||
|
||||
|
||||
gSavedSettings.setF32("UIScaleFactor", childGetValue("ui_scale_slider").asReal());
|
||||
@@ -163,6 +173,17 @@ void LLPanelGeneral::cancel()
|
||||
{
|
||||
}
|
||||
|
||||
// static
|
||||
void LLPanelGeneral::onClickCheckbox(LLUICtrl* ctrl, void* data)
|
||||
{
|
||||
LLPanelGeneral* self = (LLPanelGeneral*)data;
|
||||
bool enabled = ctrl->getValue().asBoolean();
|
||||
if(ctrl->getName() == "away_when_idle_checkbox")
|
||||
self->childSetEnabled("afk_timeout_spinner", enabled);
|
||||
else if(ctrl->getName() == "notify_money_change_checkbox")
|
||||
self->childSetEnabled("no_transaction_clutter_checkbox", enabled);
|
||||
}
|
||||
|
||||
// static
|
||||
void LLPanelGeneral::onClickClearSettings(void*)
|
||||
{
|
||||
|
||||
@@ -47,6 +47,7 @@ public:
|
||||
void apply();
|
||||
void cancel();
|
||||
|
||||
static void onClickCheckbox(LLUICtrl* ctrl, void* data);
|
||||
static void onClickClearSettings(void*);
|
||||
static void callbackResetAllSettings(const LLSD& notification, const LLSD& response);
|
||||
};
|
||||
|
||||
@@ -415,10 +415,9 @@ void LLPanelGroupGeneral::activate()
|
||||
LLGroupMgr::getInstance()->sendGroupTitlesRequest(mGroupID);
|
||||
LLGroupMgr::getInstance()->sendGroupPropertiesRequest(mGroupID);
|
||||
|
||||
|
||||
if (!gdatap || !gdatap->isMemberDataComplete() )
|
||||
{
|
||||
LLGroupMgr::getInstance()->sendGroupMembersRequest(mGroupID);
|
||||
LLGroupMgr::getInstance()->sendCapGroupMembersRequest(mGroupID);
|
||||
}
|
||||
|
||||
mFirstUse = FALSE;
|
||||
@@ -884,7 +883,7 @@ void LLPanelGroupGeneral::updateMembers()
|
||||
for( ; mMemberProgress != gdatap->mMembers.end() && i<UPDATE_MEMBERS_PER_FRAME;
|
||||
++mMemberProgress, ++i)
|
||||
{
|
||||
//llinfos << "Adding " << iter->first << ", " << iter->second->getTitle() << llendl;
|
||||
lldebugs << "Adding " << mMemberProgress->first << ", " << mMemberProgress->second->getTitle() << llendl;
|
||||
LLGroupMemberData* member = mMemberProgress->second;
|
||||
if (!member)
|
||||
{
|
||||
@@ -924,15 +923,15 @@ void LLPanelGroupGeneral::updateMembers()
|
||||
}
|
||||
sAllTime += all_timer.getElapsedTimeF32();
|
||||
|
||||
llinfos << "Updated " << i << " of " << UPDATE_MEMBERS_PER_FRAME << "members in the list." << llendl;
|
||||
lldebugs << "Updated " << i << " of " << UPDATE_MEMBERS_PER_FRAME << "members in the list." << llendl;
|
||||
if (mMemberProgress == gdatap->mMembers.end())
|
||||
{
|
||||
llinfos << " member list completed." << llendl;
|
||||
lldebugs << " member list completed." << llendl;
|
||||
mListVisibleMembers->setEnabled(TRUE);
|
||||
|
||||
llinfos << "All Time: " << sAllTime << llendl;
|
||||
llinfos << "SD Time: " << sSDTime << llendl;
|
||||
llinfos << "Element Time: " << sElementTime << llendl;
|
||||
lldebugs << "All Time: " << sAllTime << llendl;
|
||||
lldebugs << "SD Time: " << sSDTime << llendl;
|
||||
lldebugs << "Element Time: " << sElementTime << llendl;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -576,8 +576,8 @@ void LLPanelGroupInvite::updateLists()
|
||||
if (!mPendingUpdate)
|
||||
{
|
||||
LLGroupMgr::getInstance()->sendGroupPropertiesRequest(mImplementation->mGroupID);
|
||||
LLGroupMgr::getInstance()->sendGroupMembersRequest(mImplementation->mGroupID);
|
||||
LLGroupMgr::getInstance()->sendGroupRoleDataRequest(mImplementation->mGroupID);
|
||||
LLGroupMgr::getInstance()->sendCapGroupMembersRequest(mImplementation->mGroupID);
|
||||
}
|
||||
mPendingUpdate = TRUE;
|
||||
}
|
||||
|
||||
@@ -402,7 +402,7 @@ void LLPanelGroupRoles::activate()
|
||||
|
||||
if (!gdatap || !gdatap->isMemberDataComplete() )
|
||||
{
|
||||
LLGroupMgr::getInstance()->sendGroupMembersRequest(mGroupID);
|
||||
LLGroupMgr::getInstance()->sendCapGroupMembersRequest(mGroupID);
|
||||
}
|
||||
|
||||
// Check role data.
|
||||
@@ -1979,7 +1979,7 @@ void LLPanelGroupRolesSubTab::update(LLGroupChange gc)
|
||||
|
||||
if (!gdatap || !gdatap->isMemberDataComplete())
|
||||
{
|
||||
LLGroupMgr::getInstance()->sendGroupMembersRequest(mGroupID);
|
||||
LLGroupMgr::getInstance()->sendCapGroupMembersRequest(mGroupID);
|
||||
}
|
||||
|
||||
if (!gdatap || !gdatap->isRoleMemberDataComplete())
|
||||
@@ -2571,7 +2571,7 @@ void LLPanelGroupActionsSubTab::handleActionSelect()
|
||||
}
|
||||
else
|
||||
{
|
||||
LLGroupMgr::getInstance()->sendGroupMembersRequest(mGroupID);
|
||||
LLGroupMgr::getInstance()->sendCapGroupMembersRequest(mGroupID);
|
||||
}
|
||||
|
||||
if (gdatap->isRoleDataComplete())
|
||||
|
||||
@@ -131,7 +131,7 @@ public:
|
||||
virtual BOOL copyToClipboard() const;
|
||||
virtual void cutToClipboard();
|
||||
virtual BOOL isClipboardPasteable() const;
|
||||
virtual void pasteFromClipboard();
|
||||
virtual void pasteFromClipboard(bool only_copies = false);
|
||||
virtual void pasteLinkFromClipboard();
|
||||
virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
|
||||
virtual void performAction(LLInventoryModel* model, std::string action);
|
||||
@@ -604,7 +604,7 @@ BOOL LLTaskInvFVBridge::isClipboardPasteable() const
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void LLTaskInvFVBridge::pasteFromClipboard()
|
||||
void LLTaskInvFVBridge::pasteFromClipboard(bool only_copies)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -213,6 +213,7 @@ extern bool gShiftFrame;
|
||||
// function prototypes
|
||||
bool check_offer_throttle(const std::string& from_name, bool check_only);
|
||||
void callbackCacheEstateOwnerName(const LLUUID& id, const std::string& full_name, bool is_group);
|
||||
static void process_money_balance_reply_extended(LLMessageSystem* msg);
|
||||
|
||||
//inventory offer throttle globals
|
||||
LLFrameTimer gThrottleTimer;
|
||||
@@ -3633,29 +3634,11 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// [Ansariel/Henri: Display name support]
|
||||
if (chatter && chatter->isAvatar())
|
||||
{
|
||||
if (LLAvatarNameCache::useDisplayNames())
|
||||
{
|
||||
LLAvatarName avatar_name;
|
||||
if (LLAvatarNameCache::get(from_id, &avatar_name))
|
||||
{
|
||||
static const LLCachedControl<S32> phoenix_name_system("PhoenixNameSystem", 0);
|
||||
if (phoenix_name_system == 2 || (phoenix_name_system == 1 && avatar_name.mIsDisplayNameDefault))
|
||||
{
|
||||
from_name = avatar_name.mDisplayName;
|
||||
}
|
||||
else
|
||||
{
|
||||
from_name = avatar_name.getCompleteName();
|
||||
}
|
||||
}
|
||||
if (LLAvatarNameCache::getPNSName(from_id, from_name))
|
||||
chat.mFromName = from_name;
|
||||
}
|
||||
}
|
||||
// [/Ansariel/Henri: Display name support]
|
||||
|
||||
BOOL visible_in_chat_bubble = FALSE;
|
||||
std::string verb;
|
||||
@@ -5706,20 +5689,20 @@ void process_money_balance_reply( LLMessageSystem* msg, void** )
|
||||
gStatusBar->setLandCredit(credit);
|
||||
gStatusBar->setLandCommitted(committed);
|
||||
}
|
||||
static std::deque<LLUUID> recent;
|
||||
if(!desc.empty() && gSavedSettings.getBOOL("NotifyMoneyChange")
|
||||
&& (std::find(recent.rbegin(), recent.rend(), tid) == recent.rend()))
|
||||
{
|
||||
// Make the user confirm the transaction, since they might
|
||||
// have missed something during an event.
|
||||
// *TODO:translate
|
||||
LLSD args;
|
||||
args["MESSAGE"] = desc;
|
||||
LLNotificationsUtil::add("SystemMessage", args);
|
||||
|
||||
// Also send notification to chat -- MC
|
||||
LLChat chat(desc);
|
||||
LLFloaterChat::addChat(desc);
|
||||
if (desc.empty()
|
||||
|| !gSavedSettings.getBOOL("NotifyMoneyChange"))
|
||||
{
|
||||
// ...nothing to display
|
||||
return;
|
||||
}
|
||||
|
||||
// Suppress duplicate messages about the same transaction
|
||||
static std::deque<LLUUID> recent;
|
||||
if (std::find(recent.rbegin(), recent.rend(), tid) != recent.rend())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Once the 'recent' container gets large enough, chop some
|
||||
// off the beginning.
|
||||
@@ -5732,6 +5715,215 @@ void process_money_balance_reply( LLMessageSystem* msg, void** )
|
||||
}
|
||||
//LL_DEBUGS("Messaging") << "Pushing back transaction " << tid << LL_ENDL;
|
||||
recent.push_back(tid);
|
||||
|
||||
if (msg->has("TransactionInfo"))
|
||||
{
|
||||
// ...message has extended info for localization
|
||||
process_money_balance_reply_extended(msg);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Only old dev grids will not supply the TransactionInfo block,
|
||||
// so we can just use the hard-coded English string.
|
||||
LLSD args;
|
||||
args["MESSAGE"] = desc;
|
||||
LLNotificationsUtil::add("SystemMessage", args);
|
||||
|
||||
// Also send notification to chat -- MC
|
||||
LLChat chat(desc);
|
||||
LLFloaterChat::addChat(desc);
|
||||
}
|
||||
}
|
||||
|
||||
static std::string reason_from_transaction_type(S32 transaction_type,
|
||||
const std::string& item_desc)
|
||||
{
|
||||
// *NOTE: The keys for the reason strings are unusual because
|
||||
// an earlier version of the code used English language strings
|
||||
// extracted from hard-coded server English descriptions.
|
||||
// Keeping them so we don't have to re-localize them.
|
||||
switch (transaction_type)
|
||||
{
|
||||
case TRANS_OBJECT_SALE:
|
||||
{
|
||||
LLStringUtil::format_map_t arg;
|
||||
arg["ITEM"] = item_desc;
|
||||
return LLTrans::getString("for item", arg);
|
||||
}
|
||||
case TRANS_LAND_SALE:
|
||||
return LLTrans::getString("for a parcel of land");
|
||||
|
||||
case TRANS_LAND_PASS_SALE:
|
||||
return LLTrans::getString("for a land access pass");
|
||||
|
||||
case TRANS_GROUP_LAND_DEED:
|
||||
return LLTrans::getString("for deeding land");
|
||||
|
||||
case TRANS_GROUP_CREATE:
|
||||
return LLTrans::getString("to create a group");
|
||||
|
||||
case TRANS_GROUP_JOIN:
|
||||
return LLTrans::getString("to join a group");
|
||||
|
||||
case TRANS_UPLOAD_CHARGE:
|
||||
return LLTrans::getString("to upload");
|
||||
|
||||
case TRANS_CLASSIFIED_CHARGE:
|
||||
return LLTrans::getString("to publish a classified ad");
|
||||
|
||||
// These have no reason to display, but are expected and should not
|
||||
// generate warnings
|
||||
case TRANS_GIFT:
|
||||
case TRANS_PAY_OBJECT:
|
||||
case TRANS_OBJECT_PAYS:
|
||||
return std::string();
|
||||
|
||||
default:
|
||||
llwarns << "Unknown transaction type "
|
||||
<< transaction_type << llendl;
|
||||
return std::string();
|
||||
}
|
||||
}
|
||||
|
||||
static void process_money_balance_reply_extended(LLMessageSystem* msg)
|
||||
{
|
||||
// Added in server 1.40 and viewer 2.1, support for localization
|
||||
// and agent ids for name lookup.
|
||||
S32 transaction_type = 0;
|
||||
LLUUID source_id;
|
||||
BOOL is_source_group = false;
|
||||
LLUUID dest_id;
|
||||
BOOL is_dest_group = false;
|
||||
S32 amount = 0;
|
||||
std::string item_description;
|
||||
BOOL success = false;
|
||||
|
||||
msg->getS32("TransactionInfo", "TransactionType", transaction_type);
|
||||
msg->getUUID("TransactionInfo", "SourceID", source_id);
|
||||
msg->getBOOL("TransactionInfo", "IsSourceGroup", is_source_group);
|
||||
msg->getUUID("TransactionInfo", "DestID", dest_id);
|
||||
msg->getBOOL("TransactionInfo", "IsDestGroup", is_dest_group);
|
||||
msg->getS32("TransactionInfo", "Amount", amount);
|
||||
msg->getString("TransactionInfo", "ItemDescription", item_description);
|
||||
msg->getBOOL("MoneyData", "TransactionSuccess", success);
|
||||
LL_INFOS("Money") << "MoneyBalanceReply source " << source_id
|
||||
<< " dest " << dest_id
|
||||
<< " type " << transaction_type
|
||||
<< " item " << item_description << LL_ENDL;
|
||||
|
||||
if (source_id.isNull() && dest_id.isNull())
|
||||
{
|
||||
// this is a pure balance update, no notification required
|
||||
return;
|
||||
}
|
||||
|
||||
std::string source_slurl;
|
||||
if (is_source_group)
|
||||
{
|
||||
gCacheName->getGroupName(source_id, source_slurl);
|
||||
}
|
||||
else
|
||||
{
|
||||
LLAvatarNameCache::getPNSName(source_id, source_slurl);
|
||||
}
|
||||
|
||||
std::string dest_slurl;
|
||||
if (is_dest_group)
|
||||
{
|
||||
gCacheName->getGroupName(dest_id, dest_slurl);
|
||||
}
|
||||
else
|
||||
{
|
||||
LLAvatarNameCache::getPNSName(dest_id, dest_slurl);
|
||||
}
|
||||
|
||||
std::string reason =
|
||||
reason_from_transaction_type(transaction_type, item_description);
|
||||
|
||||
LLStringUtil::format_map_t args;
|
||||
args["REASON"] = reason; // could be empty
|
||||
args["AMOUNT"] = llformat("%d", amount);
|
||||
|
||||
// Need to delay until name looked up, so need to know whether or not
|
||||
// is group
|
||||
bool is_name_group = false;
|
||||
LLUUID name_id;
|
||||
std::string message;
|
||||
static LLCachedControl<bool> no_transaction_clutter("LiruNoTransactionClutter", false);
|
||||
std::string notification = no_transaction_clutter ? "Payment" : "SystemMessage";
|
||||
LLSD final_args;
|
||||
LLSD payload;
|
||||
|
||||
bool you_paid_someone = (source_id == gAgentID);
|
||||
if (you_paid_someone)
|
||||
{
|
||||
args["NAME"] = dest_slurl;
|
||||
is_name_group = is_dest_group;
|
||||
name_id = dest_id;
|
||||
if (!reason.empty())
|
||||
{
|
||||
if (dest_id.notNull())
|
||||
{
|
||||
message = success ? LLTrans::getString("you_paid_ldollars", args) :
|
||||
LLTrans::getString("you_paid_failure_ldollars", args);
|
||||
}
|
||||
else
|
||||
{
|
||||
// transaction fee to the system, eg, to create a group
|
||||
message = success ? LLTrans::getString("you_paid_ldollars_no_name", args) :
|
||||
LLTrans::getString("you_paid_failure_ldollars_no_name", args);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (dest_id.notNull())
|
||||
{
|
||||
message = success ? LLTrans::getString("you_paid_ldollars_no_reason", args) :
|
||||
LLTrans::getString("you_paid_failure_ldollars_no_reason", args);
|
||||
}
|
||||
else
|
||||
{
|
||||
// no target, no reason, you just paid money
|
||||
message = success ? LLTrans::getString("you_paid_ldollars_no_info", args) :
|
||||
LLTrans::getString("you_paid_failure_ldollars_no_info", args);
|
||||
}
|
||||
}
|
||||
final_args["MESSAGE"] = message;
|
||||
}
|
||||
else
|
||||
{
|
||||
// ...someone paid you
|
||||
args["NAME"] = source_slurl;
|
||||
is_name_group = is_source_group;
|
||||
name_id = source_id;
|
||||
if (!reason.empty())
|
||||
{
|
||||
message = LLTrans::getString("paid_you_ldollars", args);
|
||||
}
|
||||
else
|
||||
{
|
||||
message = LLTrans::getString("paid_you_ldollars_no_reason", args);
|
||||
}
|
||||
final_args["MESSAGE"] = message;
|
||||
|
||||
// make notification loggable
|
||||
payload["from_id"] = source_id;
|
||||
}
|
||||
|
||||
// Despite using SLURLs, wait until the name is available before
|
||||
// showing the notification, otherwise the UI layout is strange and
|
||||
// the user sees a "Loading..." message
|
||||
if (is_name_group)
|
||||
{
|
||||
gCacheName->getGroup(name_id,
|
||||
boost::bind(&LLNotificationsUtil::add,
|
||||
notification, final_args, payload));
|
||||
}
|
||||
else
|
||||
{
|
||||
LLAvatarNameCache::get(name_id,
|
||||
boost::bind(&LLNotificationsUtil::add,
|
||||
notification, final_args, payload));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1565,7 +1565,6 @@ void LLViewerRegion::unpackRegionHandshake()
|
||||
msg->sendReliable(host);
|
||||
}
|
||||
|
||||
|
||||
void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
|
||||
{
|
||||
capabilityNames.append("AgentState");
|
||||
@@ -1576,11 +1575,9 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
|
||||
capabilityNames.append("CopyInventoryFromNotecard");
|
||||
capabilityNames.append("CreateInventoryCategory");
|
||||
capabilityNames.append("DispatchRegionInfo");
|
||||
capabilityNames.append("EnvironmentSettings");
|
||||
capabilityNames.append("EstateChangeInfo");
|
||||
capabilityNames.append("EventQueueGet");
|
||||
capabilityNames.append("EnvironmentSettings");
|
||||
/*capabilityNames.append("ObjectMedia");
|
||||
capabilityNames.append("ObjectMediaNavigate");*/
|
||||
|
||||
if (gSavedSettings.getBOOL("UseHTTPInventory")) //Caps suffixed with 2 by LL. Don't update until rest of fetch system is updated first.
|
||||
{
|
||||
@@ -1591,12 +1588,12 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
|
||||
}
|
||||
|
||||
capabilityNames.append("GetDisplayNames");
|
||||
capabilityNames.append("GetTexture");
|
||||
capabilityNames.append("GetMesh");
|
||||
capabilityNames.append("GetObjectCost");
|
||||
capabilityNames.append("GetObjectPhysicsData");
|
||||
capabilityNames.append("GetTexture");
|
||||
capabilityNames.append("GroupMemberData");
|
||||
capabilityNames.append("GroupProposalBallot");
|
||||
|
||||
capabilityNames.append("HomeLocation");
|
||||
//capabilityNames.append("LandResources"); //Script limits (llfloaterscriptlimits.cpp)
|
||||
capabilityNames.append("MapLayer");
|
||||
@@ -1606,9 +1603,11 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
|
||||
#endif //MESH_IMPORT
|
||||
capabilityNames.append("NavMeshGenerationStatus");
|
||||
capabilityNames.append("NewFileAgentInventory");
|
||||
/*capabilityNames.append("ObjectMedia");
|
||||
capabilityNames.append("ObjectMediaNavigate");*/
|
||||
capabilityNames.append("ObjectNavMeshProperties");
|
||||
capabilityNames.append("ParcelNavigateMedia"); //Singu Note: Removed by Baker, do we need this?
|
||||
capabilityNames.append("ParcelPropertiesUpdate");
|
||||
capabilityNames.append("ParcelNavigateMedia");
|
||||
capabilityNames.append("ParcelVoiceInfoRequest");
|
||||
capabilityNames.append("ProductInfoRequest");
|
||||
capabilityNames.append("ProvisionVoiceAccountRequest");
|
||||
@@ -1622,10 +1621,10 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
|
||||
capabilityNames.append("SendUserReport");
|
||||
capabilityNames.append("SendUserReportWithScreenshot");
|
||||
capabilityNames.append("ServerReleaseNotes");
|
||||
capabilityNames.append("SimConsole");
|
||||
capabilityNames.append("SimulatorFeatures");
|
||||
capabilityNames.append("SetDisplayName");
|
||||
capabilityNames.append("SimConsole"); //Singu Note: Removed by Baker, sim console won't work without this.
|
||||
capabilityNames.append("SimConsoleAsync");
|
||||
capabilityNames.append("SimulatorFeatures");
|
||||
capabilityNames.append("StartGroupProposal");
|
||||
capabilityNames.append("TerrainNavMeshProperties");
|
||||
capabilityNames.append("TextureStats");
|
||||
@@ -1633,10 +1632,10 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
|
||||
capabilityNames.append("UpdateAgentInformation");
|
||||
capabilityNames.append("UpdateAgentLanguage");
|
||||
capabilityNames.append("UpdateGestureAgentInventory");
|
||||
capabilityNames.append("UpdateNotecardAgentInventory");
|
||||
capabilityNames.append("UpdateScriptAgent");
|
||||
capabilityNames.append("UpdateGestureTaskInventory");
|
||||
capabilityNames.append("UpdateNotecardAgentInventory");
|
||||
capabilityNames.append("UpdateNotecardTaskInventory");
|
||||
capabilityNames.append("UpdateScriptAgent");
|
||||
capabilityNames.append("UpdateScriptTask");
|
||||
capabilityNames.append("UploadBakedTexture");
|
||||
//capabilityNames.append("ViewerMetrics");
|
||||
|
||||
@@ -873,7 +873,7 @@ void send_stats()
|
||||
llinfos << "Misc Stats: int_1: " << misc["int_1"] << " int_2: " << misc["int_2"] << llendl;
|
||||
llinfos << "Misc Stats: string_1: " << misc["string_1"] << " string_2: " << misc["string_2"] << llendl;
|
||||
|
||||
body["DisplayNamesEnabled"] = gSavedSettings.getS32("PhoenixNameSystem") > 0;
|
||||
body["DisplayNamesEnabled"] = gSavedSettings.getS32("PhoenixNameSystem") == 1 || gSavedSettings.getS32("PhoenixNameSystem") == 2;
|
||||
body["DisplayNamesShowUsername"] = gSavedSettings.getS32("PhoenixNameSystem") == 1;
|
||||
|
||||
body["MinimalSkin"] = false;
|
||||
|
||||
@@ -3751,8 +3751,8 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
|
||||
|
||||
static const LLCachedControl<S32> phoenix_name_system("PhoenixNameSystem", 0);
|
||||
|
||||
bool show_display_names = phoenix_name_system > 0;
|
||||
bool show_usernames = phoenix_name_system < 2;
|
||||
bool show_display_names = phoenix_name_system == 1 || phoenix_name_system == 2;
|
||||
bool show_usernames = phoenix_name_system != 2;
|
||||
if (show_display_names && LLAvatarNameCache::useDisplayNames())
|
||||
{
|
||||
LLAvatarName av_name;
|
||||
|
||||
@@ -265,7 +265,7 @@ void RlvUIEnabler::onToggleShowNames(bool fQuitting)
|
||||
else
|
||||
{
|
||||
LLAvatarNameCache::setForceDisplayNames(false);
|
||||
LLAvatarNameCache::setUseDisplayNames(gSavedSettings.getS32("PhoenixNameSystem") != 0);
|
||||
LLAvatarNameCache::setUseDisplayNames(gSavedSettings.getS32("PhoenixNameSystem") == 1 || gSavedSettings.getS32("PhoenixNameSystem") == 2);
|
||||
}
|
||||
LLVOAvatar::invalidateNameTags(); // See handleDisplayNamesOptionChanged()
|
||||
}
|
||||
|
||||
@@ -99,9 +99,9 @@
|
||||
Reference
|
||||
</combo_item>
|
||||
</combo_box>
|
||||
<check_box bottom="-70" control_name="ScaleUniform" follows="left|top"
|
||||
<check_box bottom="-67" control_name="ScaleUniform" follows="left|top"
|
||||
font="SansSerifSmall" height="15" initial_value="false"
|
||||
label="Stretch Both Sides" left="143" mouse_opaque="true"
|
||||
label="Stretch Both Sides" left="128" mouse_opaque="true"
|
||||
name="checkbox uniform" width="134" />
|
||||
<check_box bottom_delta="-16" control_name="ScaleStretchTextures" follows="left|top"
|
||||
font="SansSerifSmall" height="15" initial_value="true"
|
||||
@@ -111,12 +111,16 @@
|
||||
font="SansSerifSmall" height="15" initial_value="true"
|
||||
label="Limit drag distance" left_delta="0" mouse_opaque="true"
|
||||
name="checkbox limit drag distance" width="134" />
|
||||
<check_box bottom_delta="-15" control_name="AscentBuildPrefs_ActualRoot" follows="left|top"
|
||||
height="16" label="Edit Axis at Root" name="checkbox actual root" width="134"/>
|
||||
<check_box bottom_delta="-16" control_name="RenderHighlightSelections" follows="left|top"
|
||||
height="15" label="Show Highlight" name="checkbox show highlight"/>
|
||||
<check_box bottom_delta="-16" control_name="SnapEnabled" follows="left|top"
|
||||
font="SansSerifSmall" height="15" initial_value="true" label="Use Grid"
|
||||
left_delta="0" mouse_opaque="true" name="checkbox snap to grid" width="134" />
|
||||
<button bottom_delta="-17" follows="left|top" font="SansSerifSmall" halign="center"
|
||||
valign="center" height="20" label="Options..." label_selected="Options..."
|
||||
left_delta="20" mouse_opaque="true" name="Options..." scale_image="TRUE" width="80" />
|
||||
<button bottom_delta="0" follows="left|top" font="SansSerifSmall" halign="center"
|
||||
valign="center" height="18" label="Options..." label_selected="Options..."
|
||||
left_delta="64" mouse_opaque="true" name="Options..." scale_image="TRUE" width="75" />
|
||||
|
||||
<!-- Help text -->
|
||||
|
||||
@@ -293,13 +297,13 @@
|
||||
increment="0.1" initial_val="0.00" left="178" max_val="2.0" min_val="-1.0"
|
||||
mouse_opaque="true" name="slider force" width="80" />
|
||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||
bottom="-151" left="118" drop_shadow_visible="true" follows="left|top"
|
||||
bottom="-160" left="118" drop_shadow_visible="true" follows="left|top"
|
||||
font="SansSerifSmall" h_pad="0" halign="right" height="16" visible="false"
|
||||
mouse_opaque="true" name="link_num_obj_count" v_pad="0" width="143">
|
||||
[DESC] [NUM]
|
||||
</text>
|
||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||
bottom="-163" left="118" drop_shadow_visible="true" follows="left|top"
|
||||
bottom="-170" left="118" drop_shadow_visible="true" follows="left|top"
|
||||
font="SansSerifSmall" h_pad="0" halign="right" height="16"
|
||||
mouse_opaque="true" name="prim_count" v_pad="0" width="143"/>
|
||||
|
||||
|
||||
@@ -198,6 +198,10 @@
|
||||
name="Paste" width="128">
|
||||
<on_click filter="" function="Inventory.DoToSelected" userdata="paste" />
|
||||
</menu_item_call>
|
||||
<menu_item_call bottom_delta="-18" height="18" label="Paste As Copy" left="0" mouse_opaque="true"
|
||||
name="Paste As Copy" width="128">
|
||||
<on_click filter="" function="Inventory.DoToSelected" userdata="paste_copies" />
|
||||
</menu_item_call>
|
||||
<menu_item_call bottom_delta="-18" height="18" label="Paste As Link" left="0" mouse_opaque="true"
|
||||
name="Paste As Link" width="128">
|
||||
<on_click filter="" function="Inventory.DoToSelected" userdata="paste_link" />
|
||||
|
||||
@@ -5880,6 +5880,14 @@ Please select at least one type of content to search (PG, Mature, or Adult).
|
||||
[MESSAGE]
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="notify.tga"
|
||||
name="Payment"
|
||||
type="notifytip">
|
||||
<tag>funds</tag>
|
||||
[MESSAGE]
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="notify.tga"
|
||||
name="EventNotification"
|
||||
|
||||
@@ -23,8 +23,10 @@
|
||||
<text bottom="-180" height="12" left="10" name="UI Size:">UI Size:</text>
|
||||
<slider bottom="-180" can_edit_text="true" height="16" increment="0.025" initial_val="1" left="98" max_val="1.4" min_val="0.75" name="ui_scale_slider" value="1" width="227" />
|
||||
<check_box bottom="-195" height="16" initial_value="false" label="Use resolution independent scale" left="101" name="ui_auto_scale"/>
|
||||
<spinner bottom="-220" decimal_digits="0" height="16" increment="1" initial_val="300" label="Away Timeout:" label_width="91" left="10" max_val="600" min_val="0" name="afk_timeout_spinner" width="137"/>
|
||||
<check_box bottom="-257" height="16" initial_value="false" label="Notify when in-world currency is spent or received" left="10" name="notify_money_change_checkbox"/>
|
||||
<check_box bottom="-219" height="16" left="10" label="Go away when idle" name="away_when_idle_checkbox"/>
|
||||
<spinner bottom="-220" decimal_digits="0" height="16" increment="1" initial_val="300" label="Away Timeout:" label_width="91" left="136" max_val="600" min_val="0" name="afk_timeout_spinner" width="137"/>
|
||||
<check_box bottom="-257" height="16" initial_value="false" label="Notify when in-world currency is exchanged" left="10" name="notify_money_change_checkbox"/>
|
||||
<check_box bottom="-257" height="16" label="without filling up the corner" left="245" name="no_transaction_clutter_checkbox" tool_tip="Still present the notifications, but have them pop up in the bottom right momentarily, then leave, so the transaction draws attention but doesn't get in the way."/>
|
||||
<text bottom="-291" height="10" left="10" name="maturity_desired_label">Rating:</text>
|
||||
<text bottom="-291" height="10" left="101" name="maturity_desired_prompt">I want to access content rated:</text>
|
||||
<combo_box bottom="-297" follows="left|top" height="18" left="267" name="maturity_desired_combobox" width="120" control_name="PreferredMaturity">
|
||||
@@ -35,7 +37,7 @@
|
||||
<text bottom="-291" height="10" left="265" name="maturity_desired_textbox">PG only</text>
|
||||
<text bottom="-20" height="10" left="10" name="start_location_textbox">Start Location:</text>
|
||||
<text bottom="-64" height="10" name="show_names_textbox">Show Names:</text>
|
||||
<text bottom="-214" height="10" left="150" name="seconds_textbox">seconds</text>
|
||||
<text bottom="-214" height="10" left="276" name="seconds_textbox">seconds</text>
|
||||
<text bottom="-331" height="18" left="10" name="crash_report_textbox">Crash reports:</text>
|
||||
<text bottom="-363" height="18" name="language_textbox">Language:</text>
|
||||
<text bottom_delta="6" follows="top" height="18" left_delta="243" name="language_textbox2">(Requires restart for full effect)
|
||||
|
||||
@@ -3873,9 +3873,27 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
|
||||
<string name="Home position set.">Home position set.</string>
|
||||
|
||||
<!-- Financial operations strings -->
|
||||
<string name="this_costs">This costs [CURRENCY]</string>
|
||||
<string name="paid_you_ldollars">[NAME] paid you L$[AMOUNT] [REASON].</string>
|
||||
<string name="paid_you_ldollars_no_reason">[NAME] paid you L$[AMOUNT].</string>
|
||||
<string name="you_paid_ldollars">You paid [NAME] L$[AMOUNT] [REASON].</string>
|
||||
<string name="you_paid_ldollars_no_info">You paid L$[AMOUNT].</string>
|
||||
<string name="you_paid_ldollars_no_reason">You paid [NAME] L$[AMOUNT].</string>
|
||||
<string name="you_paid_ldollars_no_name">You paid L$[AMOUNT] [REASON].</string>
|
||||
<string name="you_paid_failure_ldollars">You failed to pay [NAME] L$[AMOUNT] [REASON].</string>
|
||||
<string name="you_paid_failure_ldollars_no_info">You failed to pay L$[AMOUNT].</string>
|
||||
<string name="you_paid_failure_ldollars_no_reason">You failed to pay [NAME] L$[AMOUNT].</string>
|
||||
<string name="you_paid_failure_ldollars_no_name">You failed to pay L$[AMOUNT] [REASON].</string>
|
||||
<string name="for item">for [ITEM]</string>
|
||||
<string name="for a parcel of land">for a parcel of land</string>
|
||||
<string name="for a land access pass">for a land access pass</string>
|
||||
<string name="for deeding land">for deeding land</string>
|
||||
<string name="to create a group">to create a group</string>
|
||||
<string name="to join a group">to join a group</string>
|
||||
<string name="to upload">to upload</string>
|
||||
<string name="to publish a classified ad">to publish a classified ad</string>
|
||||
|
||||
<string name="giving">Giving [CURRENCY]</string>
|
||||
<string name="this_costs">This costs [CURRENCY]</string>
|
||||
|
||||
<string name="group_role_everyone">Everyone</string>
|
||||
<string name="group_role_officers">Officers</string>
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<floater name="floater_merchant_outbox" title="Buzón de Salida de Comerciante">
|
||||
<string name="OutboxFolderCount0">Sin Carpetas</string>
|
||||
<string name="OutboxFolderCount1">1 Carpeta</string>
|
||||
<string name="OutboxFolderCountN">[NUM] Carpetas</string>
|
||||
<string name="OutboxImporting">Enviando Carpetas...</string>
|
||||
<string name="OutboxInitializing">Inicializando...</string>
|
||||
<!--panel
|
||||
name="panel_1 this panel killed xui names, for some reason"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
top="0"
|
||||
label=""
|
||||
height="440"
|
||||
width="333"-->
|
||||
<panel name="outbox_inventory_placeholder_panel">
|
||||
<text name="outbox_inventory_placeholder_title">
|
||||
Cargando...
|
||||
</text>
|
||||
</panel>
|
||||
<panel name="panel_2">
|
||||
<panel name="outbox_generic_drag_target">
|
||||
<text name="text_1">
|
||||
Arrastra los Ítems aquí para crear las carpetas
|
||||
</text>
|
||||
</panel>
|
||||
<button label="Enviar al Mercado" tool_tip="Poner en el escaparate de mi Tienda en el Mercado" name="outbox_import_btn"/>
|
||||
</panel>
|
||||
<text name="import_progress_indicator" left="180">
|
||||
Importación en progreso
|
||||
</text>
|
||||
<!--/panel-->
|
||||
</floater>
|
||||
@@ -0,0 +1,3 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater name="region_debug_console" title="Depurador de la Región">
|
||||
</floater>
|
||||
@@ -0,0 +1,3 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<outbox_inventory_panel name="inventory_outbox" tool_tip="Arrastra y suelta aquí los ítems para prepararlos para la venta en el escaparate de tu Tienda">
|
||||
</outbox_inventory_panel>
|
||||
@@ -6775,6 +6775,8 @@ version 2.0
|
||||
}
|
||||
|
||||
// And, the money transfer
|
||||
// *NOTE: Unused as of 2010-04-06, because all back-end money transactions
|
||||
// are done with web services via L$ API. JC
|
||||
{
|
||||
MoneyTransferBackend Low 312 Trusted Zerocoded
|
||||
{
|
||||
@@ -6825,6 +6827,19 @@ version 2.0
|
||||
{ SquareMetersCommitted S32 }
|
||||
{ Description Variable 1 } // string
|
||||
}
|
||||
// For replies that are part of a transaction (buying something) provide
|
||||
// metadata for localization. If TransactionType is 0, the message is
|
||||
// purely a balance update. Added for server 1.40 and viewer 2.1. JC
|
||||
{
|
||||
TransactionInfo Single
|
||||
{ TransactionType S32 } // lltransactiontype.h
|
||||
{ SourceID LLUUID }
|
||||
{ IsSourceGroup BOOL }
|
||||
{ DestID LLUUID }
|
||||
{ IsDestGroup BOOL }
|
||||
{ Amount S32 }
|
||||
{ ItemDescription Variable 1 } // string
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -6851,6 +6866,17 @@ version 2.0
|
||||
{ SquareMetersCommitted S32 }
|
||||
{ Description Variable 1 } // string
|
||||
}
|
||||
// See MoneyBalanceReply above.
|
||||
{
|
||||
TransactionInfo Single
|
||||
{ TransactionType S32 } // lltransactiontype.h
|
||||
{ SourceID LLUUID }
|
||||
{ IsSourceGroup BOOL }
|
||||
{ DestID LLUUID }
|
||||
{ IsDestGroup BOOL }
|
||||
{ Amount S32 }
|
||||
{ ItemDescription Variable 1 } // string
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user