Fixed low bug EXT-5124 - Display buddy icons on online/offline alerts

--HG--
branch : product-engine
meow-7.2.2
Dmitry Zaporozhan 2010-02-16 11:54:46 +02:00
parent 09ffc1e031
commit a24eb0a449
4 changed files with 92 additions and 7 deletions

View File

@ -682,17 +682,24 @@ void LLAvatarTracker::processNotify(LLMessageSystem* msg, bool online)
}
BOOL notify = FALSE;
LLSD args;
LLSD payload;
for(S32 i = 0; i < count; ++i)
{
msg->getUUIDFast(_PREHASH_AgentBlock, _PREHASH_AgentID, agent_id, i);
payload["FROM_ID"] = agent_id;
info = getBuddyInfo(agent_id);
if(info)
{
setBuddyOnline(agent_id,online);
if(chat_notify)
{
notify = TRUE;
args["NAME_SLURL"] = LLSLURL::buildCommand("agent", agent_id, "about");
std::string first, last;
if(gCacheName->getName(agent_id, first, last))
{
notify = TRUE;
args["FIRST"] = first;
args["LAST"] = last;
}
}
}
else
@ -719,13 +726,13 @@ void LLAvatarTracker::processNotify(LLMessageSystem* msg, bool online)
notification =
LLNotificationsUtil::add("FriendOnline",
args,
LLSD().with("respond_on_mousedown", TRUE),
payload.with("respond_on_mousedown", TRUE),
boost::bind(&LLAvatarActions::startIM, agent_id));
}
else
{
notification =
LLNotificationsUtil::add("FriendOffline", args);
LLNotificationsUtil::add("FriendOffline", args, payload);
}
// If there's an open IM session with this agent, send a notification there too.

View File

@ -43,6 +43,37 @@
using namespace LLNotificationsUI;
class LLOnalineStatusToast : public LLToastPanel
{
public:
struct Params
{
LLNotificationPtr notification;
LLUUID avatar_id;
std::string message;
Params() {}
};
LLOnalineStatusToast(Params& p) : LLToastPanel(p.notification)
{
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_online_status.xml");
childSetValue("avatar_icon", p.avatar_id);
childSetValue("message", p.message);
if (p.notification->getPayload().has("respond_on_mousedown")
&& p.notification->getPayload()["respond_on_mousedown"] )
{
setMouseDownCallback(boost::bind(&LLNotification::respond, p.notification,
p.notification->getResponseTemplate()));
}
// set line max count to 2 in case of a very long name
snapToMessageHeight(getChild<LLTextBox>("message"), 2);
}
};
//--------------------------------------------------------------------------
LLTipHandler::LLTipHandler(e_notification_type type, const LLSD& id)
@ -114,7 +145,19 @@ bool LLTipHandler::processNotification(const LLSD& notify)
LLHandlerUtil::spawnIMSession(name, from_id);
}
LLToastNotifyPanel* notify_box = new LLToastNotifyPanel(notification);
LLToastPanel* notify_box = NULL;
if("FriendOffline" == notification->getName() || "FriendOnline" == notification->getName())
{
LLOnalineStatusToast::Params p;
p.notification = notification;
p.message = notification->getMessage();
p.avatar_id = notification->getPayload()["FROM_ID"];
notify_box = new LLOnalineStatusToast(p);
}
else
{
notify_box = new LLToastNotifyPanel(notification);
}
LLToast::Params p;
p.notif_id = notification->getID();

View File

@ -4310,14 +4310,14 @@ Topic: [SUBJECT], Message: [MESSAGE]
icon="notifytip.tga"
name="FriendOnline"
type="notifytip">
[NAME_SLURL] is Online
[FIRST] [LAST] is Online
</notification>
<notification
icon="notifytip.tga"
name="FriendOffline"
type="notifytip">
[NAME_SLURL] is Offline
[FIRST] [LAST] is Offline
</notification>
<notification

View File

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
background_visible="true"
height="152"
label="friend_online_status"
layout="topleft"
left="0"
name="friend_online_status"
top="0"
width="305">
<avatar_icon
follows="top|left"
height="18"
image_name="Generic_Person"
layout="topleft"
left="3"
mouse_opaque="false"
name="avatar_icon"
top="10"
width="18" />
<text
font="SansSerifSmall"
follows="all"
height="137"
layout="topleft"
left_pad="5"
name="message"
text_color="white"
top="15"
use_ellipses="true"
value=""
width="285"
word_wrap="true"
max_length="350" />
</panel>