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
meow-7.2.2
Alexei Arabadji 2010-04-01 17:48:07 +03:00
parent 4992eaf27d
commit 53c96ec24b
2 changed files with 45 additions and 51 deletions

View File

@ -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)
@ -144,39 +155,11 @@ LLToast::~LLToast()
mOnToastDestroyedSignal(this);
}
//--------------------------------------------------------------------------
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);
}

View File

@ -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;