This commit is contained in:
Shyotl
2012-12-12 03:12:08 -06:00
44 changed files with 817 additions and 393 deletions

6
README
View File

@@ -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.

View File

@@ -839,6 +839,7 @@ P(estateChangeInfoResponder);
P(eventPollResponder);
P(fetchInventoryResponder);
P(fnPtrResponder);
P2(groupMemberDataResponder, transfer_300s);
P2(groupProposalBallotResponder, transfer_300s);
P(homeLocationResponder);
P(HTTPGetResponder);

View File

@@ -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)

View File

@@ -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<

View File

@@ -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>

View File

@@ -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);

View File

@@ -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)

View File

@@ -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?)

View File

@@ -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
{

View File

@@ -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"

View File

@@ -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)
{

View File

@@ -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());

View File

@@ -143,6 +143,8 @@ public:
LLCheckBoxCtrl* mCheckStretchUniform;
LLCheckBoxCtrl* mCheckStretchTexture;
LLCheckBoxCtrl* mCheckLimitDrag;
LLCheckBoxCtrl* mCheckShowHighlight;
LLCheckBoxCtrl* mCheckActualRoot;
LLButton *mBtnRotateLeft;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
};

View File

@@ -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))
{

View File

@@ -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);

View File

@@ -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;
};

View File

@@ -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(

View File

@@ -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;

View File

@@ -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";

View File

@@ -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");

View File

@@ -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;

View File

@@ -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*)
{

View File

@@ -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);
};

View File

@@ -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
{

View File

@@ -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;
}

View File

@@ -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())

View File

@@ -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)
{
}

View File

@@ -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));
}
}

View File

@@ -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");

View File

@@ -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;

View File

@@ -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;

View File

@@ -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()
}

View File

@@ -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"/>

View File

@@ -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" />

View File

@@ -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"

View File

@@ -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)

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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
}
}