diff options
| author | Alexei Arabadji <aarabadji@productengine.com> | 2010-04-01 17:48:07 +0300 | 
|---|---|---|
| committer | Alexei Arabadji <aarabadji@productengine.com> | 2010-04-01 17:48:07 +0300 | 
| commit | 53c96ec24b70452ddd1947bb23ece84cc1c1004c (patch) | |
| tree | 5a7f96682fe29b0fd9caeac34ba46a4162cf0760 /indra/newview | |
| parent | 4992eaf27dd113df805f347811882e72df6d7a86 (diff) | |
EXT-2801 Record "object return" notification into IM history, not chat history,
replaced toast timer LLTimer with LLEventTimer implementation that not depends on draw method;
reviewed by Vadim Savchuk at https://codereview.productengine.com/secondlife/r/148/
--HG--
branch : product-engine
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/lltoast.cpp | 59 | ||||
| -rw-r--r-- | indra/newview/lltoast.h | 37 | 
2 files changed, 45 insertions, 51 deletions
| diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp index 60a89c02e4..60657d3fa7 100644 --- a/indra/newview/lltoast.cpp +++ b/indra/newview/lltoast.cpp @@ -41,6 +41,16 @@  using namespace LLNotificationsUI; +/*virtual*/ +BOOL LLToastLifeTimer::tick() +{ +	if (mEventTimer.hasExpired()) +	{ +		mToast->expire(); +	} +	return FALSE; +} +  //--------------------------------------------------------------------------  LLToast::Params::Params()   :	can_fade("can_fade", true), @@ -57,7 +67,6 @@ LLToast::Params::Params()  LLToast::LLToast(const LLToast::Params& p)   :	LLModalDialog(LLSD(), p.is_modal),  	mPanel(p.panel),  -	mToastLifetime(p.lifetime_secs),  	mToastFadingTime(p.fading_time_secs),  	mNotificationID(p.notif_id),    	mSessionID(p.session_id), @@ -71,6 +80,8 @@ LLToast::LLToast(const LLToast::Params& p)  	mIsTip(p.is_tip),  	mWrapperPanel(NULL)  { +	mTimer.reset(new LLToastLifeTimer(this, p.lifetime_secs)); +  	LLUICtrlFactory::getInstance()->buildFloater(this, "panel_toast.xml", NULL);  	setCanDrag(FALSE); @@ -105,7 +116,7 @@ BOOL LLToast::postBuild()  {  	if(!mCanFade)  	{ -		mTimer.stop(); +		mTimer->stop();  	}  	if (mIsTip) @@ -145,38 +156,10 @@ LLToast::~LLToast()  }  //-------------------------------------------------------------------------- -void LLToast::setAndStartTimer(F32 period) -{ -	if(mCanFade) -	{ -		mToastLifetime = period; -		mTimer.start(); -	} -} - -//-------------------------------------------------------------------------- -bool LLToast::lifetimeHasExpired() -{ -	if (mTimer.getStarted()) -	{ -		F32 elapsed_time = mTimer.getElapsedTimeF32(); -		if ((mToastLifetime - elapsed_time) <= mToastFadingTime)  -		{ -			setBackgroundOpaque(FALSE); -		} -		if (elapsed_time > mToastLifetime)  -		{ -			return true; -		} -	} -	return false; -} - -//--------------------------------------------------------------------------  void LLToast::hide()  {  	setVisible(FALSE); -	mTimer.stop(); +	mTimer->stop();  	mIsHidden = true;  	mOnFadeSignal(this);   } @@ -222,12 +205,13 @@ void LLToast::setCanFade(bool can_fade)  {   	mCanFade = can_fade;   	if(!mCanFade) -		mTimer.stop(); +		mTimer->stop();  }  //-------------------------------------------------------------------------- -void LLToast::tick() +void LLToast::expire()  { +	// if toast has fade property - hide it  	if(mCanFade)  	{  		hide(); @@ -263,11 +247,6 @@ void LLToast::insertPanel(LLPanel* panel)  //--------------------------------------------------------------------------  void LLToast::draw()  { -	if(lifetimeHasExpired()) -	{ -		tick(); -	} -  	LLFloater::draw();  	if(!isBackgroundVisible()) @@ -300,9 +279,9 @@ void LLToast::setVisible(BOOL show)  	if(show)  	{  		setBackgroundOpaque(TRUE); -		if(!mTimer.getStarted() && mCanFade) +		if(!mTimer->getStarted() && mCanFade)  		{ -			mTimer.start(); +			mTimer->start();  		}  		LLModalDialog::setFrontmost(FALSE);  	} diff --git a/indra/newview/lltoast.h b/indra/newview/lltoast.h index 64855020a9..20198a9398 100644 --- a/indra/newview/lltoast.h +++ b/indra/newview/lltoast.h @@ -36,7 +36,7 @@  #include "llpanel.h"  #include "llmodaldialog.h" -#include "lltimer.h" +#include "lleventtimer.h"  #include "llnotificationptr.h"  #include "llviewercontrol.h" @@ -48,12 +48,32 @@  namespace LLNotificationsUI  { +class LLToast; +/** + * Timer for toasts. + */ +class LLToastLifeTimer: public LLEventTimer +{ +public: +	LLToastLifeTimer(LLToast* toast, F32 period) : mToast(toast), LLEventTimer(period){} + +	/*virtual*/ +	BOOL tick(); +	void stop() { mEventTimer.stop(); } +	void start() { mEventTimer.start(); } +	void restart() {mEventTimer.reset(); } +	BOOL getStarted() { return mEventTimer.getStarted(); } +private : +	LLToast* mToast; +}; +  /**   * Represents toast pop-up.   * This is a parent view for all toast panels.   */  class LLToast : public LLModalDialog  { +	friend class LLToastLifeTimer;  public:  	typedef boost::function<void (LLToast* toast)> toast_callback_t;  	typedef boost::signals2::signal<void (LLToast* toast)> toast_signal_t; @@ -107,12 +127,10 @@ public:  	LLPanel* getPanel() { return mPanel; }  	// enable/disable Toast's Hide button  	void setHideButtonEnabled(bool enabled); -	// initialize and start Toast's timer -	void setAndStartTimer(F32 period);  	//  -	void resetTimer() { mTimer.start(); } +	void resetTimer() { mTimer->start(); }  	// -	void stopTimer() { mTimer.stop(); } +	void stopTimer() { mTimer->stop(); }  	//  	virtual void draw();  	// @@ -176,10 +194,7 @@ private:  	void handleTipToastClick(S32 x, S32 y, MASK mask); -	// check timer -	bool	lifetimeHasExpired(); -	// on timer finished function -	void	tick(); +	void	expire();  	LLUUID				mNotificationID;  	LLUUID				mSessionID; @@ -188,8 +203,8 @@ private:  	LLPanel* mWrapperPanel;  	// timer counts a lifetime of a toast -	LLTimer		mTimer; -	F32			mToastLifetime; // in seconds +	std::auto_ptr<LLToastLifeTimer> mTimer; +  	F32			mToastFadingTime; // in seconds  	LLPanel*		mPanel; | 
