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-enginemeow-7.2.2
parent
4992eaf27d
commit
53c96ec24b
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue