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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file lltoast.h
  3.  * @brief This class implements a placeholder for any notification panel.
  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_LLTOAST_H
  33. #define LL_LLTOAST_H
  34. #include "llpanel.h"
  35. #include "llmodaldialog.h"
  36. #include "lltimer.h"
  37. #include "llnotificationptr.h"
  38. #include "llviewercontrol.h"
  39. #include "lltexteditor.h"
  40. #define MOUSE_LEAVE false
  41. #define MOUSE_ENTER true
  42. namespace LLNotificationsUI
  43. {
  44. /**
  45.  * Represents toast pop-up.
  46.  * This is a parent view for all toast panels.
  47.  */
  48. class LLToast : public LLModalDialog
  49. {
  50. public:
  51. typedef boost::function<void (LLToast* toast)> toast_callback_t;
  52. typedef boost::signals2::signal<void (LLToast* toast)> toast_signal_t;
  53. struct Params : public LLInitParam::Block<Params>
  54. {
  55. Mandatory<LLPanel*> panel;
  56. Optional<LLUUID> notif_id,  //notification ID
  57. session_id;  //im session ID
  58. Optional<LLNotificationPtr> notification;
  59. Optional<F32> lifetime_secs,
  60. fading_time_secs; // Number of seconds while a toast is fading
  61. Optional<toast_callback_t> on_delete_toast,
  62. on_mouse_enter;
  63. Optional<bool> can_fade,
  64. can_be_stored,
  65. enable_hide_btn,
  66. is_modal,
  67. is_tip,
  68. force_show,
  69. force_store;
  70. Params();
  71. };
  72. LLToast(const LLToast::Params& p);
  73. virtual ~LLToast();
  74. BOOL postBuild();
  75. // Toast handlers
  76. virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
  77. //Fading
  78. /** Stop fading timer */
  79. virtual void stopFading();
  80. /** Start fading timer */
  81. virtual void startFading();
  82. bool isHovered();
  83. // Operating with toasts
  84. // insert a panel to a toast
  85. void insertPanel(LLPanel* panel);
  86. void reshapeToPanel();
  87. // get toast's panel
  88. LLPanel* getPanel() { return mPanel; }
  89. // enable/disable Toast's Hide button
  90. void setHideButtonEnabled(bool enabled);
  91. // initialize and start Toast's timer
  92. void setAndStartTimer(F32 period);
  93. // 
  94. void resetTimer() { mTimer.start(); }
  95. //
  96. void stopTimer() { mTimer.stop(); }
  97. //
  98. virtual void draw();
  99. //
  100. virtual void setVisible(BOOL show);
  101. /*virtual*/ void setBackgroundOpaque(BOOL b);
  102. //
  103. virtual void hide();
  104. /*virtual*/ void onFocusLost();
  105. /*virtual*/ void onFocusReceived();
  106. /**
  107.  * Returns padding between floater top and wrapper_panel top.
  108.  * This padding should be taken into account when positioning or reshaping toasts
  109.  */
  110. S32 getTopPad();
  111. S32 getRightPad();
  112. // get/set Toast's flags or states
  113. // get information whether the notification corresponding to the toast is valid or not
  114. bool isNotificationValid();
  115. // get toast's Notification ID
  116. const LLUUID getNotificationID() { return mNotificationID;}
  117. // get toast's Session ID
  118. const LLUUID getSessionID() { return mSessionID;}
  119. //
  120. void setCanFade(bool can_fade);
  121. //
  122. void setCanBeStored(bool can_be_stored) { mCanBeStored = can_be_stored; }
  123. //
  124. bool getCanBeStored() { return mCanBeStored; }
  125. // set whether this toast considered as hidden or not
  126. void setIsHidden( bool is_toast_hidden ) { mIsHidden = is_toast_hidden; }
  127. const LLNotificationPtr& getNotification() { return mNotification;}
  128. // Registers signals/callbacks for events
  129. toast_signal_t mOnFadeSignal;
  130. toast_signal_t mOnMouseEnterSignal;
  131. toast_signal_t mOnDeleteToastSignal;
  132. toast_signal_t mOnToastDestroyedSignal;
  133. boost::signals2::connection setOnFadeCallback(toast_callback_t cb) { return mOnFadeSignal.connect(cb); }
  134. boost::signals2::connection setOnToastDestroyedCallback(toast_callback_t cb) { return mOnToastDestroyedSignal.connect(cb); }
  135. typedef boost::function<void (LLToast* toast, bool mouse_enter)> toast_hover_check_callback_t;
  136. typedef boost::signals2::signal<void (LLToast* toast, bool mouse_enter)> toast_hover_check_signal_t;
  137. toast_hover_check_signal_t mOnToastHoverSignal;
  138. boost::signals2::connection setOnToastHoverCallback(toast_hover_check_callback_t cb) { return mOnToastHoverSignal.connect(cb); }
  139. boost::signals2::connection setMouseEnterCallback( const commit_signal_t::slot_type& cb ) { return mToastMouseEnterSignal.connect(cb); };
  140. boost::signals2::connection setMouseLeaveCallback( const commit_signal_t::slot_type& cb ) { return mToastMouseLeaveSignal.connect(cb); };
  141. private:
  142. void onToastMouseEnter();
  143. void onToastMouseLeave();
  144. void handleTipToastClick(S32 x, S32 y, MASK mask);
  145. // check timer
  146. bool lifetimeHasExpired();
  147. // on timer finished function
  148. void tick();
  149. LLUUID mNotificationID;
  150. LLUUID mSessionID;
  151. LLNotificationPtr mNotification;
  152. LLPanel* mWrapperPanel;
  153. // timer counts a lifetime of a toast
  154. LLTimer mTimer;
  155. F32 mToastLifetime; // in seconds
  156. F32 mToastFadingTime; // in seconds
  157. LLPanel* mPanel;
  158. LLButton* mHideBtn;
  159. LLTextEditor* mTextEditor;
  160. LLColor4 mBgColor;
  161. bool mCanFade;
  162. bool mCanBeStored;
  163. bool mHideBtnEnabled;
  164. bool mHideBtnPressed;
  165. bool mIsHidden;  // this flag is TRUE when a toast has faded or was hidden with (x) button (EXT-1849)
  166. bool mIsTip;
  167. commit_signal_t mToastMouseEnterSignal;
  168. commit_signal_t mToastMouseLeaveSignal;
  169. };
  170. }
  171. #endif