201 lines
5.7 KiB
C++
201 lines
5.7 KiB
C++
/**
|
|
* @file llinspectremoteobject.cpp
|
|
*
|
|
* $LicenseInfo:firstyear=2009&license=viewergpl$
|
|
*
|
|
* Copyright (c) 2009, Linden Research, Inc.
|
|
*
|
|
* Second Life Viewer Source Code
|
|
* The source code in this file ("Source Code") is provided by Linden Lab
|
|
* to you under the terms of the GNU General Public License, version 2.0
|
|
* ("GPL"), unless you have obtained a separate licensing agreement
|
|
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
|
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
|
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
|
*
|
|
* There are special exceptions to the terms and conditions of the GPL as
|
|
* it is applied to this Source Code. View the full text of the exception
|
|
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
|
* online at
|
|
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
|
*
|
|
* By copying, modifying or distributing this software, you acknowledge
|
|
* that you have read and understood your obligations described above,
|
|
* and agree to abide by those obligations.
|
|
*
|
|
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
|
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
|
* COMPLETENESS OR PERFORMANCE.
|
|
* $/LicenseInfo$
|
|
*/
|
|
|
|
#include "llviewerprecompiledheaders.h"
|
|
|
|
#include "llinspectremoteobject.h"
|
|
#include "llinspect.h"
|
|
#include "llslurl.h"
|
|
#include "llmutelist.h"
|
|
#include "llurlaction.h"
|
|
#include "llpanelblockedlist.h"
|
|
#include "llfloaterreg.h"
|
|
#include "llui.h"
|
|
#include "lluictrl.h"
|
|
|
|
class LLViewerObject;
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// LLInspectRemoteObject
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
// Remote Object Inspector, a small information window used to
|
|
// display information about potentially-remote objects. Used
|
|
// to display details about objects sending messages to the user.
|
|
class LLInspectRemoteObject : public LLInspect
|
|
{
|
|
friend class LLFloaterReg;
|
|
|
|
public:
|
|
LLInspectRemoteObject(const LLSD& object_id);
|
|
virtual ~LLInspectRemoteObject() {};
|
|
|
|
/*virtual*/ BOOL postBuild(void);
|
|
/*virtual*/ void onOpen(const LLSD& avatar_id);
|
|
|
|
void onClickMap();
|
|
void onClickBlock();
|
|
void onClickClose();
|
|
|
|
private:
|
|
void update();
|
|
static void nameCallback(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group, void* data);
|
|
|
|
private:
|
|
LLUUID mObjectID;
|
|
LLUUID mOwnerID;
|
|
std::string mOwner;
|
|
std::string mSLurl;
|
|
std::string mName;
|
|
bool mGroupOwned;
|
|
};
|
|
|
|
LLInspectRemoteObject::LLInspectRemoteObject(const LLSD& sd) :
|
|
LLInspect(LLSD()),
|
|
mObjectID(NULL),
|
|
mOwnerID(NULL),
|
|
mOwner(""),
|
|
mSLurl(""),
|
|
mName(""),
|
|
mGroupOwned(false)
|
|
{
|
|
}
|
|
|
|
/*virtual*/
|
|
BOOL LLInspectRemoteObject::postBuild(void)
|
|
{
|
|
// hook up the inspector's buttons
|
|
getChild<LLUICtrl>("map_btn")->setCommitCallback(
|
|
boost::bind(&LLInspectRemoteObject::onClickMap, this));
|
|
getChild<LLUICtrl>("block_btn")->setCommitCallback(
|
|
boost::bind(&LLInspectRemoteObject::onClickBlock, this));
|
|
getChild<LLUICtrl>("close_btn")->setCommitCallback(
|
|
boost::bind(&LLInspectRemoteObject::onClickClose, this));
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/*virtual*/
|
|
void LLInspectRemoteObject::onOpen(const LLSD& data)
|
|
{
|
|
// Start animation
|
|
LLInspect::onOpen(data);
|
|
|
|
// Extract appropriate object information from input LLSD
|
|
// (Eventually, it might be nice to query server for details
|
|
// rather than require caller to pass in the information.)
|
|
mObjectID = data["object_id"].asUUID();
|
|
mName = data["name"].asString();
|
|
mOwnerID = data["owner_id"].asUUID();
|
|
mGroupOwned = data["group_owned"].asBoolean();
|
|
mSLurl = data["slurl"].asString();
|
|
|
|
// work out the owner's name
|
|
mOwner = "";
|
|
if (gCacheName)
|
|
{
|
|
gCacheName->get(mOwnerID, mGroupOwned, nameCallback, this);
|
|
}
|
|
|
|
// update the inspector with the current object state
|
|
update();
|
|
|
|
// Position the inspector relative to the mouse cursor
|
|
LLUI::positionViewNearMouse(this);
|
|
}
|
|
|
|
void LLInspectRemoteObject::onClickMap()
|
|
{
|
|
std::string url = "secondlife://" + mSLurl;
|
|
LLUrlAction::showLocationOnMap(url);
|
|
closeFloater();
|
|
}
|
|
|
|
void LLInspectRemoteObject::onClickBlock()
|
|
{
|
|
LLMute::EType mute_type = mGroupOwned ? LLMute::GROUP : LLMute::AGENT;
|
|
LLMute mute(mOwnerID, mOwner, mute_type);
|
|
LLMuteList::getInstance()->add(mute);
|
|
LLPanelBlockedList::showPanelAndSelect(mute.mID);
|
|
closeFloater();
|
|
}
|
|
|
|
void LLInspectRemoteObject::onClickClose()
|
|
{
|
|
closeFloater();
|
|
}
|
|
|
|
//static
|
|
void LLInspectRemoteObject::nameCallback(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group, void* data)
|
|
{
|
|
LLInspectRemoteObject *self = (LLInspectRemoteObject*)data;
|
|
self->mOwner = first;
|
|
if (!last.empty())
|
|
{
|
|
self->mOwner += " " + last;
|
|
}
|
|
self->update();
|
|
}
|
|
|
|
void LLInspectRemoteObject::update()
|
|
{
|
|
// show the object name as the inspector's title
|
|
getChild<LLUICtrl>("object_name")->setValue(mName);
|
|
|
|
// show the object's owner - click it to show profile
|
|
std::string owner = mOwner;
|
|
if (! mOwnerID.isNull())
|
|
{
|
|
if (mGroupOwned)
|
|
{
|
|
owner = LLSLURL::buildCommand("group", mOwnerID, "about");
|
|
}
|
|
else
|
|
{
|
|
owner = LLSLURL::buildCommand("agent", mOwnerID, "about");
|
|
}
|
|
}
|
|
getChild<LLUICtrl>("object_owner")->setValue(owner);
|
|
|
|
// display the object's SLurl - click it to teleport
|
|
std::string url = "secondlife:///app/teleport/" + mSLurl;
|
|
getChild<LLUICtrl>("object_slurl")->setValue(url);
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// LLInspectRemoteObjectUtil
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
void LLInspectRemoteObjectUtil::registerFloater()
|
|
{
|
|
LLFloaterReg::add("inspect_remote_object", "inspect_remote_object.xml",
|
|
&LLFloaterReg::build<LLInspectRemoteObject>);
|
|
}
|