From e096bdc7ed5ab61ea097019bbfe6d96a27042a56 Mon Sep 17 00:00:00 2001
From: Alexei Arabadji <aarabadji@productengine.com>
Date: Thu, 22 Apr 2010 09:26:48 +0300
Subject: [PATCH] fixed EXT-6936 Avoid using LLToastNotifyPanel class for tip
 toasts. * renamed class LLOnlineStatusToast to LLPanelOnlineStatus; * updated
 method LLToastPanel::buidPanelFromNotification to provide building all kinds
 of tip toast panels; * updated method LLTipHandler::processNotification to
 avoid using LLToastNotifyPanel;

reviewed by Vadim Savchuk at
https://codereview.productengine.com/secondlife/r/286/

--HG--
branch : product-engine
---
 indra/newview/CMakeLists.txt               |  2 +
 indra/newview/llnotificationtiphandler.cpp | 55 +-------------------
 indra/newview/llpanelonlinestatus.cpp      | 60 ++++++++++++++++++++++
 indra/newview/llpanelonlinestatus.h        | 53 +++++++++++++++++++
 indra/newview/lltoastpanel.cpp             | 15 +++++-
 5 files changed, 129 insertions(+), 56 deletions(-)
 create mode 100644 indra/newview/llpanelonlinestatus.cpp
 create mode 100644 indra/newview/llpanelonlinestatus.h

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 99ee1835fc2..c372edbea1b 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -329,6 +329,7 @@ set(viewer_SOURCE_FILES
     llpanelnearbymedia.cpp
     llpanelobject.cpp
     llpanelobjectinventory.cpp
+    llpanelonlinestatus.cpp
     llpaneloutfitedit.cpp
     llpaneloutfitsinventory.cpp
     llpanelpeople.cpp
@@ -832,6 +833,7 @@ set(viewer_HEADER_FILES
     llpanelnearbymedia.h
     llpanelobject.h
     llpanelobjectinventory.h
+    llpanelonlinestatus.h
     llpaneloutfitedit.h
     llpaneloutfitsinventory.h
     llpanelpeople.h
diff --git a/indra/newview/llnotificationtiphandler.cpp b/indra/newview/llnotificationtiphandler.cpp
index e528f871aff..df6f04b6ea2 100644
--- a/indra/newview/llnotificationtiphandler.cpp
+++ b/indra/newview/llnotificationtiphandler.cpp
@@ -45,38 +45,6 @@
 
 using namespace LLNotificationsUI;
 
-class LLOnlineStatusToast : public LLPanelTipToast
-{
-public:
-
-	struct Params
-	{
-		LLNotificationPtr	notification;
-		LLUUID				avatar_id;
-		std::string			message;
-
-		Params() {}
-	};
-
-	LLOnlineStatusToast(Params& p) : LLPanelTipToast(p.notification)
-	{
-		LLUICtrlFactory::getInstance()->buildPanel(this, "panel_online_status_toast.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 3 in case of a very long name
-		snapToMessageHeight(getChild<LLTextBox>("message"), 3);
-	}
-};
-
 //--------------------------------------------------------------------------
 LLTipHandler::LLTipHandler(e_notification_type type, const LLSD& id)
 {
@@ -157,28 +125,7 @@ bool LLTipHandler::processNotification(const LLSD& notify)
 			return true;
 		}
 
-		LLToastPanel* notify_box = NULL;
-		// TODO: this should be implemented in LLToastPanel::buidPanelFromNotification
-		if("FriendOffline" == notification->getName() || "FriendOnline" == notification->getName())
-		{
-			LLOnlineStatusToast::Params p;
-			p.notification = notification;
-			p.message = notification->getMessage();
-			p.avatar_id = notification->getPayload()["FROM_ID"];
-			notify_box = new LLOnlineStatusToast(p);
-		}
-		else
-		{
-			notify_box = LLToastPanel::buidPanelFromNotification(notification);
-		}
-
-		// TODO: this if statement should be removed  after modification of
-		// LLToastPanel::buidPanelFromNotification() to allow create generic tip panel
-		// for all tip notifications except FriendOnline and FriendOffline
-		if (notify_box == NULL)
-		{
-			notify_box = new LLToastNotifyPanel(notification);
-		}
+		LLToastPanel* notify_box = LLToastPanel::buidPanelFromNotification(notification);
 
 		LLToast::Params p;
 		p.notif_id = notification->getID();
diff --git a/indra/newview/llpanelonlinestatus.cpp b/indra/newview/llpanelonlinestatus.cpp
new file mode 100644
index 00000000000..6ba015b11c2
--- /dev/null
+++ b/indra/newview/llpanelonlinestatus.cpp
@@ -0,0 +1,60 @@
+/**
+ * @file llpanelonlinestatus.cpp
+ * @brief Represents a class of online status tip toast panels.
+ *
+ * $LicenseInfo:firstyear=2010&license=viewergpl$
+ *
+ * Copyright (c) 2010, 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 "llnotifications.h"
+#include "llpanelonlinestatus.h"
+
+LLPanelOnlineStatus::LLPanelOnlineStatus(
+		const LLNotificationPtr& notification) :
+	LLPanelTipToast(notification)
+{
+
+	LLUICtrlFactory::getInstance()->buildPanel(this,
+			"panel_online_status_toast.xml");
+
+
+	childSetValue("avatar_icon", notification->getPayload()["FROM_ID"]);
+	childSetValue("message", notification->getMessage());
+
+	if (notification->getPayload().has("respond_on_mousedown")
+			&& notification->getPayload()["respond_on_mousedown"])
+	{
+		setMouseDownCallback(boost::bind(&LLNotification::respond,
+				notification, notification->getResponseTemplate()));
+	}
+
+	// set line max count to 3 in case of a very long name
+	snapToMessageHeight(getChild<LLTextBox> ("message"), 3);
+
+}
diff --git a/indra/newview/llpanelonlinestatus.h b/indra/newview/llpanelonlinestatus.h
new file mode 100644
index 00000000000..b47050c3a20
--- /dev/null
+++ b/indra/newview/llpanelonlinestatus.h
@@ -0,0 +1,53 @@
+/**
+ * @file llpanelonlinestatus.h
+ * @brief Represents a class of online status tip toast panels.
+ *
+ * $LicenseInfo:firstyear=2010&license=viewergpl$
+ *
+ * Copyright (c) 2010, 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 "llpaneltiptoast.h"
+
+#ifndef LL_PANELONLINESTATUS_H
+#define LL_PANELONLINESTATUS_H
+
+/**
+ * Represents online tip toast panel.
+ */
+class LLPanelOnlineStatus : public LLPanelTipToast
+{
+	// disallow instantiation of this class
+private:
+	// grant privileges to instantiate this class to LLToastPanel
+	friend class LLToastPanel;
+
+	LLPanelOnlineStatus(const LLNotificationPtr& notification);
+	virtual ~LLPanelOnlineStatus() {}
+};
+
+#endif /* LL_PANELONLINESTATUS_H */
diff --git a/indra/newview/lltoastpanel.cpp b/indra/newview/lltoastpanel.cpp
index d142a0665b5..71598b3169d 100644
--- a/indra/newview/lltoastpanel.cpp
+++ b/indra/newview/lltoastpanel.cpp
@@ -33,6 +33,7 @@
 #include "llviewerprecompiledheaders.h"
 
 #include "llpanelgenerictip.h"
+#include "llpanelonlinestatus.h"
 #include "llnotifications.h"
 #include "lltoastpanel.h"
 
@@ -97,9 +98,19 @@ LLToastPanel* LLToastPanel::buidPanelFromNotification(
 {
 	LLToastPanel* res = NULL;
 
-	if (notification->getName() == "SystemMessageTip")
+	//process tip toast panels
+	if ("notifytip" == notification->getType())
 	{
-		res = new LLPanelGenericTip(notification);
+		// if it is online/offline notification
+		if ("FriendOffline" == notification->getName() || "FriendOnline" == notification->getName())
+		{
+			res = new LLPanelOnlineStatus(notification);
+		}
+		// in all other case we use generic tip panel
+		else
+		{
+			res = new LLPanelGenericTip(notification);
+		}
 	}
 	/*
 	 else if(...)
-- 
GitLab