llnotificationhandler.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:10k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llnotificationhandler.h
  3.  * @brief Here are implemented Notification Handling Classes.
  4.  *
  5.  * $LicenseInfo:firstyear=2003&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2003-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #ifndef LL_LLNOTIFICATIONHANDLER_H
  33. #define LL_LLNOTIFICATIONHANDLER_H
  34. #include "llwindow.h"
  35. //#include "llnotificationsutil.h"
  36. #include "llchannelmanager.h"
  37. #include "llchat.h"
  38. #include "llinstantmessage.h"
  39. #include "llnotificationptr.h"
  40. namespace LLNotificationsUI
  41. {
  42. // ENotificationType enumerates all possible types of notifications that could be met
  43. // 
  44. typedef enum e_notification_type
  45. {
  46. NT_NOTIFY, 
  47. NT_NOTIFYTIP,
  48. NT_GROUPNOTIFY,
  49. NT_IMCHAT, 
  50. NT_GROUPCHAT, 
  51. NT_NEARBYCHAT, 
  52. NT_ALERT,
  53. NT_ALERTMODAL,
  54. NT_OFFER
  55. } ENotificationType;
  56. /**
  57.  * Handler of notification events.
  58.  * This handler manages events related to toasts and chicklets. This is  base class
  59.  * for chat and system notification handlers.
  60.  */
  61. // LLEventHandler is a base class that specifies a common interface for all
  62. // notification handlers. It states, that every handler must react on the follofing
  63. // events:
  64. // - deleting of a toast;
  65. // - initialization of a corresponding channel;
  66. // Also every handler must have the following attributes:
  67. // - type of the notification that this handler is responsible to;
  68. // - pointer to a correspondent screen channel, in which all toasts of the handled notification's
  69. //   type should be displayed
  70. // This class also provides the following signald:
  71. // - increment counter signal
  72. // - decrement counter signal
  73. // - update counter signal
  74. // - signal, that emits ID of the notification that is being processed
  75. //
  76. class LLEventHandler
  77. {
  78. public:
  79. virtual ~LLEventHandler() {};
  80. // callbacks for counters
  81. typedef boost::function<void (void)> notification_callback_t;
  82. typedef boost::signals2::signal<void (void)> notification_signal_t;
  83. notification_signal_t mNewNotificationSignal;
  84. notification_signal_t mDelNotificationSignal;
  85. boost::signals2::connection setNewNotificationCallback(notification_callback_t cb) { return mNewNotificationSignal.connect(cb); }
  86. boost::signals2::connection setDelNotification(notification_callback_t cb) { return mDelNotificationSignal.connect(cb); }
  87. // callback for notification/toast
  88. typedef boost::function<void (const LLUUID id)> notification_id_callback_t;
  89. typedef boost::signals2::signal<void (const LLUUID id)> notification_id_signal_t;
  90. notification_id_signal_t mNotificationIDSignal;
  91. boost::signals2::connection setNotificationIDCallback(notification_id_callback_t cb) { return mNotificationIDSignal.connect(cb); }
  92. protected:
  93. virtual void onDeleteToast(LLToast* toast)=0;
  94. // arrange handler's channel on a screen
  95. // is necessary to unbind a moment of creation of a channel and a moment of positioning of it
  96. // it is useful when positioning depends on positions of other controls, that could not be created
  97. // at the moment, when a handlers creates a channel.
  98. virtual void initChannel()=0;
  99. LLScreenChannelBase* mChannel;
  100. e_notification_type mType;
  101. };
  102. // LLSysHandler and LLChatHandler are more specific base classes
  103. // that divide all notification handlers on to groups:
  104. // - handlers for different system notifications (script dialogs, tips, group notices, alerts and IMs);
  105. // - handlers for different messaging notifications (nearby chat)
  106. /**
  107.  * Handler for system notifications.
  108.  */
  109. class LLSysHandler : public LLEventHandler
  110. {
  111. public:
  112. virtual ~LLSysHandler() {};
  113. virtual bool processNotification(const LLSD& notify)=0;
  114. };
  115. /**
  116.  * Handler for chat message notifications.
  117.  */
  118. class LLChatHandler : public LLEventHandler
  119. {
  120. public:
  121. virtual ~LLChatHandler() {};
  122. virtual void processChat(const LLChat& chat_msg, const LLSD &args)=0;
  123. };
  124. /**
  125.  * Handler for IM notifications.
  126.  * It manages life time of IMs, group messages.
  127.  */
  128. class LLIMHandler : public LLSysHandler
  129. {
  130. public:
  131. LLIMHandler(e_notification_type type, const LLSD& id);
  132. virtual ~LLIMHandler();
  133. // base interface functions
  134. virtual bool processNotification(const LLSD& notify);
  135. protected:
  136. virtual void onDeleteToast(LLToast* toast);
  137. virtual void initChannel();
  138. };
  139. /**
  140.  * Handler for system informational notices.
  141.  * It manages life time of tip notices.
  142.  */
  143. class LLTipHandler : public LLSysHandler
  144. {
  145. public:
  146. LLTipHandler(e_notification_type type, const LLSD& id);
  147. virtual ~LLTipHandler();
  148. // base interface functions
  149. virtual bool processNotification(const LLSD& notify);
  150. protected:
  151. virtual void onDeleteToast(LLToast* toast);
  152. virtual void initChannel();
  153. };
  154. /**
  155.  * Handler for system informational notices.
  156.  * It manages life time of script notices.
  157.  */
  158. class LLScriptHandler : public LLSysHandler
  159. {
  160. public:
  161. LLScriptHandler(e_notification_type type, const LLSD& id);
  162. virtual ~LLScriptHandler();
  163. // base interface functions
  164. virtual bool processNotification(const LLSD& notify);
  165. protected:
  166. virtual void onDeleteToast(LLToast* toast);
  167. virtual void initChannel();
  168. // own handlers
  169. void onRejectToast(LLUUID& id);
  170. };
  171. /**
  172.  * Handler for group system notices.
  173.  */
  174. class LLGroupHandler : public LLSysHandler
  175. {
  176. public:
  177. LLGroupHandler(e_notification_type type, const LLSD& id);
  178. virtual ~LLGroupHandler();
  179. // base interface functions
  180. virtual bool processNotification(const LLSD& notify);
  181. protected:
  182. virtual void onDeleteToast(LLToast* toast);
  183. virtual void initChannel();
  184. // own handlers
  185. void onRejectToast(LLUUID& id);
  186. };
  187. /**
  188.  * Handler for alert system notices.
  189.  */
  190. class LLAlertHandler : public LLSysHandler
  191. {
  192. public:
  193. LLAlertHandler(e_notification_type type, const LLSD& id);
  194. virtual ~LLAlertHandler();
  195. void setAlertMode(bool is_modal) { mIsModal = is_modal; }
  196. // base interface functions
  197. virtual bool processNotification(const LLSD& notify);
  198. protected:
  199. virtual void onDeleteToast(LLToast* toast);
  200. virtual void initChannel();
  201. bool mIsModal;
  202. };
  203. /**
  204.  * Handler for offers notices.
  205.  * It manages life time of offer notices.
  206.  */
  207. class LLOfferHandler : public LLSysHandler
  208. {
  209. public:
  210. LLOfferHandler(e_notification_type type, const LLSD& id);
  211. virtual ~LLOfferHandler();
  212. // base interface functions
  213. virtual bool processNotification(const LLSD& notify);
  214. protected:
  215. virtual void onDeleteToast(LLToast* toast);
  216. virtual void initChannel();
  217. // own handlers
  218. void onRejectToast(LLUUID& id);
  219. };
  220. class LLHandlerUtil
  221. {
  222. public:
  223. /**
  224.  * Checks sufficient conditions to log notification message to IM session.
  225.  */
  226. static bool canLogToIM(const LLNotificationPtr& notification);
  227. /**
  228.  * Checks sufficient conditions to log notification message to nearby chat session.
  229.  */
  230. static bool canLogToNearbyChat(const LLNotificationPtr& notification);
  231. /**
  232.  * Checks sufficient conditions to spawn IM session.
  233.  */
  234. static bool canSpawnIMSession(const LLNotificationPtr& notification);
  235. /**
  236.  * Checks sufficient conditions to add notification toast panel IM floater.
  237.  */
  238. static bool canAddNotifPanelToIM(const LLNotificationPtr& notification);
  239. /**
  240.  * Checks if passed notification can create IM session and be written into it.
  241.  *
  242.  * This method uses canLogToIM() & canSpawnIMSession().
  243.  */
  244. static bool canSpawnSessionAndLogToIM(const LLNotificationPtr& notification);
  245. /**
  246.  * Writes notification message to IM session.
  247.  */
  248. static void logToIM(const EInstantMessage& session_type,
  249. const std::string& session_name, const std::string& from_name,
  250. const std::string& message, const LLUUID& session_owner_id,
  251. const LLUUID& from_id);
  252. /**
  253.  * Writes notification message to IM  p2p session.
  254.  */
  255. static void logToIMP2P(const LLNotificationPtr& notification);
  256. /**
  257.  * Writes notification message to IM  p2p session.
  258.  */
  259. static void logToIMP2P(const LLNotificationPtr& notification, bool to_file_only);
  260. /**
  261.  * Writes group notice notification message to IM  group session.
  262.  */
  263. static void logGroupNoticeToIMGroup(const LLNotificationPtr& notification);
  264. /**
  265.  * Writes notification message to nearby chat.
  266.  */
  267. static void logToNearbyChat(const LLNotificationPtr& notification, EChatSourceType type);
  268. /**
  269.  * Spawns IM session.
  270.  */
  271. static LLUUID spawnIMSession(const std::string& name, const LLUUID& from_id);
  272. /**
  273.  * Returns name from the notification's substitution.
  274.  *
  275.  * Methods gets "NAME" or "[NAME]" from the substitution map.
  276.  *
  277.  * @param notification - Notification which substitution's name will be returned.
  278.  */
  279. static std::string getSubstitutionName(const LLNotificationPtr& notification);
  280. /**
  281.  * Adds notification panel to the IM floater.
  282.  */
  283. static void addNotifPanelToIM(const LLNotificationPtr& notification);
  284. };
  285. }
  286. #endif