From d383adfc92e099676313ed930b2c1c8b1a315ae3 Mon Sep 17 00:00:00 2001
From: Vadim Savchuk <vsavchuk@productengine.com>
Date: Thu, 28 Jan 2010 22:02:31 +0200
Subject: Fixed bug EXT-3773 (Group chat toasts should have inspectors for
 names). Added on-hover icons to invoke avatar inspector to IM toasts.

--HG--
branch : product-engine
---
 indra/newview/lltoastimpanel.cpp | 37 +++++++++++++++++++++++++++++++++++++
 indra/newview/lltoastimpanel.h   |  3 +++
 2 files changed, 40 insertions(+)

(limited to 'indra')

diff --git a/indra/newview/lltoastimpanel.cpp b/indra/newview/lltoastimpanel.cpp
index 7717ae9e01..89a58cd736 100644
--- a/indra/newview/lltoastimpanel.cpp
+++ b/indra/newview/lltoastimpanel.cpp
@@ -33,8 +33,11 @@
 #include "llviewerprecompiledheaders.h"
 #include "lltoastimpanel.h"
 
+#include "llfloaterreg.h"
 #include "llnotifications.h"
 #include "llinstantmessage.h"
+#include "lltooltip.h"
+
 #include "llviewerchat.h"
 
 const S32 LLToastIMPanel::DEFAULT_MESSAGE_MAX_LINE_COUNT	= 6;
@@ -80,6 +83,7 @@ LLToastIMPanel::LLToastIMPanel(LLToastIMPanel::Params &p) :	LLToastPanel(p.notif
 	mAvatarName->setValue(p.from);
 	mTime->setValue(p.time);
 	mSessionID = p.session_id;
+	mAvatarID = p.avatar_id;
 	mNotification = p.notification;
 
 	if(p.from == SYSTEM_FROM)
@@ -119,3 +123,36 @@ BOOL LLToastIMPanel::handleMouseDown(S32 x, S32 y, MASK mask)
 
 	return TRUE;
 }
+
+//virtual
+BOOL LLToastIMPanel::handleToolTip(S32 x, S32 y, MASK mask)
+{
+	// It's not our direct child, so parentPointInView() doesn't work.
+	LLRect name_rect;
+	mAvatarName->localRectToOtherView(mAvatarName->getLocalRect(), &name_rect, this);
+	if (!name_rect.pointInRect(x, y))
+		return LLToastPanel::handleToolTip(x, y, mask);
+
+	// Spawn at right side of the name textbox.
+	LLRect sticky_rect = mAvatarName->calcScreenRect();
+	S32 icon_x = llmin(sticky_rect.mLeft + mAvatarName->getTextPixelWidth() + 3, sticky_rect.mRight - 16);
+	LLCoordGL pos(icon_x, sticky_rect.mTop);
+
+	LLToolTip::Params params;
+	params.background_visible(false);
+	params.click_callback(boost::bind(&LLToastIMPanel::showInspector, this));
+	params.delay_time(0.0f);		// spawn instantly on hover
+	params.image(LLUI::getUIImage("Info_Small"));
+	params.message("");
+	params.padding(0);
+	params.pos(pos);
+	params.sticky_rect(sticky_rect);
+
+	LLToolTipMgr::getInstance()->show(params);
+	return TRUE;
+}
+
+void LLToastIMPanel::showInspector()
+{
+	LLFloaterReg::showInstance("inspect_avatar", LLSD().with("avatar_id", mAvatarID));
+}
diff --git a/indra/newview/lltoastimpanel.h b/indra/newview/lltoastimpanel.h
index 42d9a97c3f..154e6dae16 100644
--- a/indra/newview/lltoastimpanel.h
+++ b/indra/newview/lltoastimpanel.h
@@ -58,11 +58,14 @@ public:
 	LLToastIMPanel(LLToastIMPanel::Params &p);
 	virtual ~LLToastIMPanel();
 	/*virtual*/ BOOL 	handleMouseDown(S32 x, S32 y, MASK mask);
+	/*virtual*/ BOOL	handleToolTip(S32 x, S32 y, MASK mask);
 private:
+	void showInspector();
 	static const S32 DEFAULT_MESSAGE_MAX_LINE_COUNT;
 
 	LLNotificationPtr	mNotification;
 	LLUUID				mSessionID;
+	LLUUID				mAvatarID;
 	LLAvatarIconCtrl*	mAvatarIcon;
 	LLTextBox*			mAvatarName;
 	LLTextBox*			mTime;
-- 
cgit v1.2.3