diff options
Diffstat (limited to 'indra/newview/lltoastnotifypanel.cpp')
-rw-r--r-- | indra/newview/lltoastnotifypanel.cpp | 43 |
1 files changed, 38 insertions, 5 deletions
diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp index 3f7dc24ade..a8060649ba 100644 --- a/indra/newview/lltoastnotifypanel.cpp +++ b/indra/newview/lltoastnotifypanel.cpp @@ -91,8 +91,6 @@ mCloseNotificationOnDestroy(true) sFont = LLFontGL::getFontSansSerif(); sFontSmall = LLFontGL::getFontSansSerifSmall(); } - // clicking on a button does not steal current focus - setIsChrome(TRUE); // initialize setFocusRoot(!mIsTip); // get a form for the notification @@ -245,8 +243,8 @@ LLButton* LLToastNotifyPanel::createButton(const LLSD& form_element, BOOL is_opt mBtnCallbackData.push_back(userdata); LLButton::Params p; - bool is_ignore_btn = form_element["index"].asInteger() == -1; - const LLFontGL* font = is_ignore_btn ? sFontSmall: sFont; // for ignore button in script dialog + bool make_small_btn = form_element["index"].asInteger() == -1 || form_element["index"].asInteger() == -2; + const LLFontGL* font = make_small_btn ? sFontSmall: sFont; // for block and ignore buttons in script dialog p.name(form_element["name"].asString()); p.label(form_element["text"].asString()); p.font(font); @@ -266,7 +264,7 @@ LLButton* LLToastNotifyPanel::createButton(const LLSD& form_element, BOOL is_opt p.rect.width = 1; p.auto_resize = true; } - else if (mIsScriptDialog && is_ignore_btn) + else if (mIsScriptDialog && make_small_btn) { // this is ignore button, make it smaller p.rect.height = BTN_HEIGHT_SMALL; @@ -307,8 +305,14 @@ void LLToastNotifyPanel::updateButtonsLayout(const std::vector<index_button_pair S32 bottom_offset = mIsScriptDialog ? (BTN_HEIGHT + IGNORE_BTN_TOP_DELTA + BOTTOM_PAD) : BOTTOM_PAD; S32 max_width = mControlPanel->getRect().getWidth(); LLButton* ignore_btn = NULL; + LLButton* mute_btn = NULL; for (std::vector<index_button_pair_t>::const_iterator it = buttons.begin(); it != buttons.end(); it++) { + if (-2 == it->first) + { + mute_btn = it->second; + continue; + } if (it->first == -1) { ignore_btn = it->second; @@ -328,6 +332,8 @@ void LLToastNotifyPanel::updateButtonsLayout(const std::vector<index_button_pair left = btn_rect.mLeft + btn_rect.getWidth() + h_pad; mControlPanel->addChild(btn, -1); } + + U32 ignore_btn_width = 0; if (mIsScriptDialog && ignore_btn != NULL) { LLRect ignore_btn_rect(ignore_btn->getRect()); @@ -340,8 +346,25 @@ void LLToastNotifyPanel::updateButtonsLayout(const std::vector<index_button_pair ignore_btn_rect.setOriginAndSize(ignore_btn_left, BOTTOM_PAD,// always move ignore button at the bottom ignore_btn_rect.getWidth(), ignore_btn_rect.getHeight()); ignore_btn->setRect(ignore_btn_rect); + ignore_btn_width = ignore_btn_rect.getWidth(); mControlPanel->addChild(ignore_btn, -1); } + + if (mIsScriptDialog && mute_btn != NULL) + { + LLRect mute_btn_rect(mute_btn->getRect()); + S32 buttons_per_row = max_width / BUTTON_WIDTH; //assume that h_pad far less than BUTTON_WIDTH + // Place mute (Block) button to the left of the ignore button. + S32 mute_btn_left = buttons_per_row * BUTTON_WIDTH + (buttons_per_row - 1) * h_pad - mute_btn_rect.getWidth() - ignore_btn_width - (h_pad / 2); + if (mute_btn_left + mute_btn_rect.getWidth() > max_width) // make sure that the mute button is in panel + { + mute_btn_left = max_width - mute_btn_rect.getWidth() - 2 * HPAD; + } + mute_btn_rect.setOriginAndSize(mute_btn_left, BOTTOM_PAD,// always move mute button at the bottom + mute_btn_rect.getWidth(), mute_btn_rect.getHeight()); + mute_btn->setRect(mute_btn_rect); + mControlPanel->addChild(mute_btn); + } } void LLToastNotifyPanel::adjustPanelForScriptNotice(S32 button_panel_width, S32 button_panel_height) @@ -563,7 +586,17 @@ void LLIMToastNotifyPanel::reshape(S32 width, S32 height, BOOL called_from_paren height = rc.getHeight(); width = rc.getWidth(); + bool is_width_changed = width != getRect().getWidth(); + LLToastPanel::reshape(width, height, called_from_parent); + + // Notification height required to display the text message depends on + // the width of the text box thus if panel width is changed the text box + // width is also changed then reshape() is called to adjust proper height. + if (is_width_changed) + { + reshape(width, height, called_from_parent); + } } // EOF |