diff options
Diffstat (limited to 'indra/newview/lltoast.cpp')
-rw-r--r-- | indra/newview/lltoast.cpp | 100 |
1 files changed, 41 insertions, 59 deletions
diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp index 60a89c02e4..568cd4cb19 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), @@ -71,6 +81,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,33 +117,13 @@ BOOL LLToast::postBuild() { if(!mCanFade) { - mTimer.stop(); - } - - if (mIsTip) - { - mTextEditor = mPanel->getChild<LLTextEditor>("text_editor_box"); - - if (mTextEditor) - { - mTextEditor->setMouseUpCallback(boost::bind(&LLToast::hide,this)); - mPanel->setMouseUpCallback(boost::bind(&LLToast::handleTipToastClick, this, _2, _3, _4)); - } + mTimer->stop(); } return TRUE; } //-------------------------------------------------------------------------- -void LLToast::handleTipToastClick(S32 x, S32 y, MASK mask) -{ - if (!mTextEditor->getRect().pointInRect(x, y)) - { - hide(); - } -} - -//-------------------------------------------------------------------------- void LLToast::setHideButtonEnabled(bool enabled) { if(mHideBtn) @@ -145,38 +137,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 +186,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 +228,6 @@ void LLToast::insertPanel(LLPanel* panel) //-------------------------------------------------------------------------- void LLToast::draw() { - if(lifetimeHasExpired()) - { - tick(); - } - LLFloater::draw(); if(!isBackgroundVisible()) @@ -282,6 +242,13 @@ void LLToast::draw() drawChild(mHideBtn); } } + + // if timer started and remaining time <= fading time + if (mTimer->getStarted() && (mToastLifetime + - mTimer->getEventTimer().getElapsedTimeF32()) <= mToastFadingTime) + { + setBackgroundOpaque(FALSE); + } } //-------------------------------------------------------------------------- @@ -300,12 +267,18 @@ void LLToast::setVisible(BOOL show) if(show) { setBackgroundOpaque(TRUE); - if(!mTimer.getStarted() && mCanFade) + if(!mTimer->getStarted() && mCanFade) { - mTimer.start(); + mTimer->start(); } LLModalDialog::setFrontmost(FALSE); } + else + { + //hide "hide" button in case toast was hidden without mouse_leave + if(mHideBtn) + mHideBtn->setVisible(show); + } LLFloater::setVisible(show); if(mPanel) { @@ -436,4 +409,13 @@ bool LLToast::isNotificationValid() //-------------------------------------------------------------------------- +S32 LLToast::notifyParent(const LLSD& info) +{ + if (info.has("action") && "hide_toast" == info["action"].asString()) + { + hide(); + return 1; + } + return LLModalDialog::notifyParent(info); +} |