diff options
author | Andrey Lihatskiy <alihatskiy@productengine.com> | 2024-05-01 08:16:58 +0300 |
---|---|---|
committer | Andrey Lihatskiy <alihatskiy@productengine.com> | 2024-05-01 08:16:58 +0300 |
commit | 38c2a5bde985a6a8a96d912d432f8bdf7e5b60be (patch) | |
tree | b3469444ea8dabe4e76a8a265ac086a9db78891c /indra/newview/lltoastnotifypanel.cpp | |
parent | 9bf2dfbb39032d7407295089cf181de0987083e5 (diff) | |
parent | e7eced3c87310b15ac20cc3cd470d67686104a14 (diff) |
Merge branch 'marchcat/w-whitespace' into marchcat/x-ws-merge
Diffstat (limited to 'indra/newview/lltoastnotifypanel.cpp')
-rw-r--r-- | indra/newview/lltoastnotifypanel.cpp | 532 |
1 files changed, 266 insertions, 266 deletions
diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp index 535f150ffa..a091370ee8 100644 --- a/indra/newview/lltoastnotifypanel.cpp +++ b/indra/newview/lltoastnotifypanel.cpp @@ -5,21 +5,21 @@ * $LicenseInfo:firstyear=2001&license=viewerlgpl$ * Second Life Viewer Source Code * Copyright (C) 2010, Linden Research, Inc. - * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License only. - * + * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. - * + * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * + * * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ @@ -55,216 +55,216 @@ const std::string LLToastNotifyPanel::sFontScript("SansSerif"); LLToastNotifyPanel::button_click_signal_t LLToastNotifyPanel::sButtonClickSignal; -LLToastNotifyPanel::LLToastNotifyPanel(const LLNotificationPtr& notification, const LLRect& rect, bool show_images) +LLToastNotifyPanel::LLToastNotifyPanel(const LLNotificationPtr& notification, const LLRect& rect, bool show_images) : LLCheckBoxToastPanel(notification) , LLInstanceTracker<LLToastNotifyPanel, LLUUID, LLInstanceTrackerReplaceOnCollision>(notification->getID()) , mTextBox(NULL) { - init(rect, show_images); + init(rect, show_images); } void LLToastNotifyPanel::addDefaultButton() { - LLSD form_element; - form_element.with("name", "OK").with("text", LLTrans::getString("ok")).with("default", true); - LLButton* ok_btn = createButton(form_element, FALSE); - LLRect new_btn_rect(ok_btn->getRect()); - - new_btn_rect.setOriginAndSize(llabs(getRect().getWidth() - BUTTON_WIDTH)/ 2, BOTTOM_PAD, - //auto_size for ok button makes it very small, so let's make it wider - BUTTON_WIDTH, new_btn_rect.getHeight()); - ok_btn->setRect(new_btn_rect); - addChild(ok_btn, -1); - mNumButtons = 1; - mAddedDefaultBtn = true; + LLSD form_element; + form_element.with("name", "OK").with("text", LLTrans::getString("ok")).with("default", true); + LLButton* ok_btn = createButton(form_element, FALSE); + LLRect new_btn_rect(ok_btn->getRect()); + + new_btn_rect.setOriginAndSize(llabs(getRect().getWidth() - BUTTON_WIDTH)/ 2, BOTTOM_PAD, + //auto_size for ok button makes it very small, so let's make it wider + BUTTON_WIDTH, new_btn_rect.getHeight()); + ok_btn->setRect(new_btn_rect); + addChild(ok_btn, -1); + mNumButtons = 1; + mAddedDefaultBtn = true; } LLButton* LLToastNotifyPanel::createButton(const LLSD& form_element, BOOL is_option) { - InstanceAndS32* userdata = new InstanceAndS32; - userdata->mSelf = this; - userdata->mButtonName = is_option ? form_element["name"].asString() : ""; - - mBtnCallbackData.push_back(userdata); - - LLButton::Params p; - S32 index = form_element["index"].asInteger(); - std::string name = form_element["name"].asString(); - std::string text = form_element["text"].asString(); - bool make_small_btn = index == -1 || index == -2; // for block and ignore buttons in script dialog - const LLFontGL* font = LLFontGL::getFont(LLFontDescriptor( - mIsScriptDialog ? sFontScript : sFontDefault, make_small_btn ? "Small" : "Medium", 0)); - p.name = name; - p.label = text; - p.tool_tip = text; - p.font = font; - p.rect.height = BTN_HEIGHT; - p.click_callback.function(boost::bind(&LLToastNotifyPanel::onClickButton, userdata)); - p.rect.width = BUTTON_WIDTH; - p.auto_resize = false; - p.follows.flags(FOLLOWS_LEFT | FOLLOWS_BOTTOM); - p.enabled = !form_element.has("enabled") || form_element["enabled"].asBoolean(); - if (mIsCaution) - { - p.image_color(LLUIColorTable::instance().getColor("ButtonCautionImageColor")); - p.image_color_disabled(LLUIColorTable::instance().getColor("ButtonCautionImageColor")); - } - // for the scriptdialog buttons we use fixed button size. This is a limit! - if (!mIsScriptDialog && font->getWidth(form_element["text"].asString()) > (BUTTON_WIDTH-2*HPAD)) - { - p.rect.width = 1; - p.auto_resize = true; - } - else if (mIsScriptDialog && make_small_btn) - { - // this is ignore button, make it smaller - p.rect.height = BTN_HEIGHT_SMALL; - p.rect.width = 1; - p.auto_resize = true; - } - LLButton* btn = LLUICtrlFactory::create<LLButton>(p); - mNumButtons++; - btn->autoResize(); - if (form_element["default"].asBoolean()) - { - setDefaultBtn(btn); - } - - return btn; + InstanceAndS32* userdata = new InstanceAndS32; + userdata->mSelf = this; + userdata->mButtonName = is_option ? form_element["name"].asString() : ""; + + mBtnCallbackData.push_back(userdata); + + LLButton::Params p; + S32 index = form_element["index"].asInteger(); + std::string name = form_element["name"].asString(); + std::string text = form_element["text"].asString(); + bool make_small_btn = index == -1 || index == -2; // for block and ignore buttons in script dialog + const LLFontGL* font = LLFontGL::getFont(LLFontDescriptor( + mIsScriptDialog ? sFontScript : sFontDefault, make_small_btn ? "Small" : "Medium", 0)); + p.name = name; + p.label = text; + p.tool_tip = text; + p.font = font; + p.rect.height = BTN_HEIGHT; + p.click_callback.function(boost::bind(&LLToastNotifyPanel::onClickButton, userdata)); + p.rect.width = BUTTON_WIDTH; + p.auto_resize = false; + p.follows.flags(FOLLOWS_LEFT | FOLLOWS_BOTTOM); + p.enabled = !form_element.has("enabled") || form_element["enabled"].asBoolean(); + if (mIsCaution) + { + p.image_color(LLUIColorTable::instance().getColor("ButtonCautionImageColor")); + p.image_color_disabled(LLUIColorTable::instance().getColor("ButtonCautionImageColor")); + } + // for the scriptdialog buttons we use fixed button size. This is a limit! + if (!mIsScriptDialog && font->getWidth(form_element["text"].asString()) > (BUTTON_WIDTH-2*HPAD)) + { + p.rect.width = 1; + p.auto_resize = true; + } + else if (mIsScriptDialog && make_small_btn) + { + // this is ignore button, make it smaller + p.rect.height = BTN_HEIGHT_SMALL; + p.rect.width = 1; + p.auto_resize = true; + } + LLButton* btn = LLUICtrlFactory::create<LLButton>(p); + mNumButtons++; + btn->autoResize(); + if (form_element["default"].asBoolean()) + { + setDefaultBtn(btn); + } + + return btn; } -LLToastNotifyPanel::~LLToastNotifyPanel() +LLToastNotifyPanel::~LLToastNotifyPanel() { - mButtonClickConnection.disconnect(); + mButtonClickConnection.disconnect(); - std::for_each(mBtnCallbackData.begin(), mBtnCallbackData.end(), DeletePointer()); - mBtnCallbackData.clear(); - if (mIsTip) - { - LLNotifications::getInstance()->cancel(mNotification); - } - } + std::for_each(mBtnCallbackData.begin(), mBtnCallbackData.end(), DeletePointer()); + mBtnCallbackData.clear(); + if (mIsTip) + { + LLNotifications::getInstance()->cancel(mNotification); + } + } void LLToastNotifyPanel::updateButtonsLayout(const std::vector<index_button_pair_t>& buttons, S32 h_pad) { - S32 left = 0; - //reserve place for ignore button - 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; - continue; - } - LLButton* btn = it->second; - LLRect btn_rect(btn->getRect()); - if (buttons.size() == 1) // for the one-button forms, center that button - { - left = (max_width - btn_rect.getWidth()) / 2; - } - else if (left == 0 && buttons.size() == 2) - { - // Note: this and "size() == 1" shouldn't be inside the cycle, might be good idea to refactor whole placing process - left = (max_width - (btn_rect.getWidth() * 2) - h_pad) / 2; - } - else if (left + btn_rect.getWidth() > max_width)// whether there is still some place for button+h_pad in the mControlPanel - { - // looks like we need to add button to the next row - left = 0; - bottom_offset += (BTN_HEIGHT + VPAD); - } - //we arrange buttons from bottom to top for backward support of old script - btn_rect.setOriginAndSize(left, bottom_offset, btn_rect.getWidth(), btn_rect.getHeight()); - btn->setRect(btn_rect); - left = btn_rect.mLeft + btn_rect.getWidth() + h_pad; - mControlPanel->addChild(btn, -1); - } - - U32 ignore_btn_width = 0; - U32 mute_btn_pad = 0; - if (mIsScriptDialog && ignore_btn != NULL) - { - LLRect ignore_btn_rect(ignore_btn->getRect()); - S32 ignore_btn_left = max_width - ignore_btn_rect.getWidth(); - 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); - mute_btn_pad = 4 * HPAD; //only use a 4 * HPAD padding if an ignore button exists - } - - if (mIsScriptDialog && mute_btn != NULL) - { - LLRect mute_btn_rect(mute_btn->getRect()); - // Place mute (Block) button to the left of the ignore button. - S32 mute_btn_left = max_width - mute_btn_rect.getWidth() - ignore_btn_width - mute_btn_pad; - 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); - } + S32 left = 0; + //reserve place for ignore button + 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; + continue; + } + LLButton* btn = it->second; + LLRect btn_rect(btn->getRect()); + if (buttons.size() == 1) // for the one-button forms, center that button + { + left = (max_width - btn_rect.getWidth()) / 2; + } + else if (left == 0 && buttons.size() == 2) + { + // Note: this and "size() == 1" shouldn't be inside the cycle, might be good idea to refactor whole placing process + left = (max_width - (btn_rect.getWidth() * 2) - h_pad) / 2; + } + else if (left + btn_rect.getWidth() > max_width)// whether there is still some place for button+h_pad in the mControlPanel + { + // looks like we need to add button to the next row + left = 0; + bottom_offset += (BTN_HEIGHT + VPAD); + } + //we arrange buttons from bottom to top for backward support of old script + btn_rect.setOriginAndSize(left, bottom_offset, btn_rect.getWidth(), btn_rect.getHeight()); + btn->setRect(btn_rect); + left = btn_rect.mLeft + btn_rect.getWidth() + h_pad; + mControlPanel->addChild(btn, -1); + } + + U32 ignore_btn_width = 0; + U32 mute_btn_pad = 0; + if (mIsScriptDialog && ignore_btn != NULL) + { + LLRect ignore_btn_rect(ignore_btn->getRect()); + S32 ignore_btn_left = max_width - ignore_btn_rect.getWidth(); + 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); + mute_btn_pad = 4 * HPAD; //only use a 4 * HPAD padding if an ignore button exists + } + + if (mIsScriptDialog && mute_btn != NULL) + { + LLRect mute_btn_rect(mute_btn->getRect()); + // Place mute (Block) button to the left of the ignore button. + S32 mute_btn_left = max_width - mute_btn_rect.getWidth() - ignore_btn_width - mute_btn_pad; + 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) { - //adjust layout - // we need to keep min width and max height to make visible all buttons, because width of the toast can not be changed - reshape(getRect().getWidth(), mInfoPanel->getRect().getHeight() + button_panel_height + VPAD); - mControlPanel->reshape( button_panel_width, button_panel_height); + //adjust layout + // we need to keep min width and max height to make visible all buttons, because width of the toast can not be changed + reshape(getRect().getWidth(), mInfoPanel->getRect().getHeight() + button_panel_height + VPAD); + mControlPanel->reshape( button_panel_width, button_panel_height); } void LLToastNotifyPanel::adjustPanelForTipNotice() { - //we don't need display ControlPanel for tips because they doesn't contain any buttons. - mControlPanel->setVisible(FALSE); - reshape(getRect().getWidth(), mInfoPanel->getRect().getHeight()); - - if (mNotification->getPayload().has("respond_on_mousedown") - && mNotification->getPayload()["respond_on_mousedown"] ) - { - mInfoPanel->setMouseDownCallback( - boost::bind(&LLNotification::respond, - mNotification, - mNotification->getResponseTemplate())); - } + //we don't need display ControlPanel for tips because they doesn't contain any buttons. + mControlPanel->setVisible(FALSE); + reshape(getRect().getWidth(), mInfoPanel->getRect().getHeight()); + + if (mNotification->getPayload().has("respond_on_mousedown") + && mNotification->getPayload()["respond_on_mousedown"] ) + { + mInfoPanel->setMouseDownCallback( + boost::bind(&LLNotification::respond, + mNotification, + mNotification->getResponseTemplate())); + } } // static void LLToastNotifyPanel::onClickButton(void* data) { - InstanceAndS32* self_and_button = (InstanceAndS32*)data; - LLToastNotifyPanel* self = self_and_button->mSelf; - std::string button_name = self_and_button->mButtonName; + InstanceAndS32* self_and_button = (InstanceAndS32*)data; + LLToastNotifyPanel* self = self_and_button->mSelf; + std::string button_name = self_and_button->mButtonName; - LLSD response = self->mNotification->getResponseTemplate(); - if (!self->mAddedDefaultBtn && !button_name.empty()) - { - response[button_name] = true; - } + LLSD response = self->mNotification->getResponseTemplate(); + if (!self->mAddedDefaultBtn && !button_name.empty()) + { + response[button_name] = true; + } - // disable all buttons - self->mControlPanel->setEnabled(FALSE); + // disable all buttons + self->mControlPanel->setEnabled(FALSE); - // this might repost notification with new form data/enabled buttons - self->mNotification->respond(response); + // this might repost notification with new form data/enabled buttons + self->mNotification->respond(response); } void LLToastNotifyPanel::init( LLRect rect, bool show_images ) { deleteAllChildren(); - LLRect current_rect = getRect(); + LLRect current_rect = getRect(); - setXMLFilename(""); - buildFromFile("panel_notification.xml"); + setXMLFilename(""); + buildFromFile("panel_notification.xml"); if (rect != LLRect::null) { @@ -302,7 +302,7 @@ void LLToastNotifyPanel::init( LLRect rect, bool show_images ) // customize panel's outfit // preliminary adjust panel's layout - //move to the end + //move to the end //mIsTip ? adjustPanelForTipNotice() : adjustPanelForScriptNotice(form); // adjust text options according to the notification type @@ -314,7 +314,7 @@ void LLToastNotifyPanel::init( LLRect rect, bool show_images ) } else { - mTextBox = getChild<LLTextEditor>("text_editor_box"); + mTextBox = getChild<LLTextEditor>("text_editor_box"); mTextBox->setFont(LLFontGL::getFont(LLFontDescriptor(mIsScriptDialog ? sFontScript : sFontDefault, "Medium", 0))); } @@ -324,7 +324,7 @@ void LLToastNotifyPanel::init( LLRect rect, bool show_images ) mTextBox->setUseEmoji(!mIsScriptDialog); mTextBox->setContentTrusted(is_content_trusted); mTextBox->setValue(mNotification->getMessage()); - mTextBox->setIsFriendCallback(LLAvatarActions::isFriend); + mTextBox->setIsFriendCallback(LLAvatarActions::isFriend); mTextBox->setIsObjectBlockedCallback(boost::bind(&LLMuteList::isMuted, LLMuteList::getInstance(), _1, _2, 0)); // add buttons for a script notification @@ -371,10 +371,10 @@ void LLToastNotifyPanel::init( LLRect rect, bool show_images ) /* * Probably it is a scriptdialog toast * for a scriptdialog toast h_pad can be < 2*HPAD if we have a lot of buttons. - * In last case set default h_pad to avoid heaping of buttons + * In last case set default h_pad to avoid heaping of buttons */ S32 button_per_row = button_panel_width / BUTTON_WIDTH; - h_pad = (button_panel_width % BUTTON_WIDTH) / (button_per_row - 1);// -1 because we do not need space after last button in a row + h_pad = (button_panel_width % BUTTON_WIDTH) / (button_per_row - 1);// -1 because we do not need space after last button in a row if(h_pad < 2*HPAD) // still not enough space between buttons ? { h_pad = 2*HPAD; @@ -389,15 +389,15 @@ void LLToastNotifyPanel::init( LLRect rect, bool show_images ) //reserve one row for the ignore_btn button_rows++; //calculate required panel height for scripdialog notification. - button_panel_height = button_rows * (BTN_HEIGHT + VPAD) + IGNORE_BTN_TOP_DELTA + BOTTOM_PAD; + button_panel_height = button_rows * (BTN_HEIGHT + VPAD) + IGNORE_BTN_TOP_DELTA + BOTTOM_PAD; } else { // in common case buttons can have different widths so we need to calculate button_rows according to buttons_width //S32 button_rows = llceil(F32(buttons.size()) * (buttons_width + h_pad) / button_panel_width); S32 button_rows = llceil(F32((buttons.size() - 1) * h_pad + buttons_width) / button_panel_width); - //calculate required panel height - button_panel_height = button_rows * (BTN_HEIGHT + VPAD) + BOTTOM_PAD; + //calculate required panel height + button_panel_height = button_rows * (BTN_HEIGHT + VPAD) + BOTTOM_PAD; } // we need to keep min width and max height to make visible all buttons, because width of the toast can not be changed @@ -408,9 +408,9 @@ void LLToastNotifyPanel::init( LLRect rect, bool show_images ) } } - //.xml file intially makes info panel only follow left/right/top. This is so that when control buttons are added the info panel - //can shift upward making room for the buttons inside mControlPanel. After the buttons are added, the info panel can then be set to follow 'all'. - mInfoPanel->setFollowsAll(); + //.xml file intially makes info panel only follow left/right/top. This is so that when control buttons are added the info panel + //can shift upward making room for the buttons inside mControlPanel. After the buttons are added, the info panel can then be set to follow 'all'. + mInfoPanel->setFollowsAll(); // Add checkbox (one of couple types) if nessesary. setCheckBoxes(HPAD * 2, 0, mInfoPanel); @@ -426,11 +426,11 @@ void LLToastNotifyPanel::init( LLRect rect, bool show_images ) reshape(getRect().getWidth(), new_panel_height); } - // reshape the panel to its previous size - if (current_rect.notEmpty()) - { - reshape(current_rect.getWidth(), current_rect.getHeight()); - } + // reshape the panel to its previous size + if (current_rect.notEmpty()) + { + reshape(current_rect.getWidth(), current_rect.getHeight()); + } } void LLToastNotifyPanel::deleteAllChildren() @@ -450,34 +450,34 @@ void LLToastNotifyPanel::deleteAllChildren() bool LLToastNotifyPanel::isControlPanelEnabled() const { - bool cp_enabled = mControlPanel->getEnabled(); - bool some_buttons_enabled = false; - if (cp_enabled) - { - LLView::child_list_const_iter_t child_it = mControlPanel->beginChild(); - LLView::child_list_const_iter_t child_it_end = mControlPanel->endChild(); - for(; child_it != child_it_end; ++child_it) - { - LLButton * buttonp = dynamic_cast<LLButton *>(*child_it); - if (buttonp && buttonp->getEnabled()) - { - some_buttons_enabled = true; - break; - } - } - } - - return cp_enabled && some_buttons_enabled; + bool cp_enabled = mControlPanel->getEnabled(); + bool some_buttons_enabled = false; + if (cp_enabled) + { + LLView::child_list_const_iter_t child_it = mControlPanel->beginChild(); + LLView::child_list_const_iter_t child_it_end = mControlPanel->endChild(); + for(; child_it != child_it_end; ++child_it) + { + LLButton * buttonp = dynamic_cast<LLButton *>(*child_it); + if (buttonp && buttonp->getEnabled()) + { + some_buttons_enabled = true; + break; + } + } + } + + return cp_enabled && some_buttons_enabled; } ////////////////////////////////////////////////////////////////////////// LLIMToastNotifyPanel::LLIMToastNotifyPanel(LLNotificationPtr& pNotification, const LLUUID& session_id, const LLRect& rect /* = LLRect::null */, - bool show_images /* = true */, LLTextBase* parent_text) -: mSessionID(session_id), LLToastNotifyPanel(pNotification, rect, show_images), - mParentText(parent_text) + bool show_images /* = true */, LLTextBase* parent_text) +: mSessionID(session_id), LLToastNotifyPanel(pNotification, rect, show_images), + mParentText(parent_text) { - compactButtons(); + compactButtons(); } LLIMToastNotifyPanel::~LLIMToastNotifyPanel() @@ -486,75 +486,75 @@ LLIMToastNotifyPanel::~LLIMToastNotifyPanel() void LLIMToastNotifyPanel::reshape(S32 width, S32 height, BOOL called_from_parent /* = TRUE */) { - LLToastPanel::reshape(width, height, called_from_parent); - snapToMessageHeight(); + LLToastPanel::reshape(width, height, called_from_parent); + snapToMessageHeight(); } void LLIMToastNotifyPanel::snapToMessageHeight() { - if(!mTextBox) - { - return; - } - - //Add message height if it is visible - if (mTextBox->getVisible()) - { - S32 new_panel_height = computeSnappedToMessageHeight(mTextBox, LLToastPanel::MAX_TEXT_LENGTH); - - //reshape the panel with new height - if (new_panel_height != getRect().getHeight()) - { - LLToastNotifyPanel::reshape( getRect().getWidth(), new_panel_height); - } - } + if(!mTextBox) + { + return; + } + + //Add message height if it is visible + if (mTextBox->getVisible()) + { + S32 new_panel_height = computeSnappedToMessageHeight(mTextBox, LLToastPanel::MAX_TEXT_LENGTH); + + //reshape the panel with new height + if (new_panel_height != getRect().getHeight()) + { + LLToastNotifyPanel::reshape( getRect().getWidth(), new_panel_height); + } + } } void LLIMToastNotifyPanel::compactButtons() { - //we can't set follows in xml since it broke toasts behavior - setFollows(FOLLOWS_LEFT|FOLLOWS_RIGHT|FOLLOWS_TOP); - - const child_list_t* children = getControlPanel()->getChildList(); - S32 offset = 0; - // Children were added by addChild() which uses push_front to insert them into list, - // so to get buttons in correct order reverse iterator is used (EXT-5906) - for (child_list_t::const_reverse_iterator it = children->rbegin(); it != children->rend(); it++) - { - LLButton * button = dynamic_cast<LLButton*> (*it); - if (button != NULL) - { - button->setOrigin( offset,button->getRect().mBottom); - button->setLeftHPad(2 * HPAD); - button->setRightHPad(2 * HPAD); - // set zero width before perform autoResize() - button->setRect(LLRect(button->getRect().mLeft, - button->getRect().mTop, - button->getRect().mLeft, - button->getRect().mBottom)); - button->setAutoResize(true); - button->autoResize(); - offset += HPAD + button->getRect().getWidth(); - button->setFollowsNone(); - } - } - - if (mParentText) - { - mParentText->needsReflow(); - } + //we can't set follows in xml since it broke toasts behavior + setFollows(FOLLOWS_LEFT|FOLLOWS_RIGHT|FOLLOWS_TOP); + + const child_list_t* children = getControlPanel()->getChildList(); + S32 offset = 0; + // Children were added by addChild() which uses push_front to insert them into list, + // so to get buttons in correct order reverse iterator is used (EXT-5906) + for (child_list_t::const_reverse_iterator it = children->rbegin(); it != children->rend(); it++) + { + LLButton * button = dynamic_cast<LLButton*> (*it); + if (button != NULL) + { + button->setOrigin( offset,button->getRect().mBottom); + button->setLeftHPad(2 * HPAD); + button->setRightHPad(2 * HPAD); + // set zero width before perform autoResize() + button->setRect(LLRect(button->getRect().mLeft, + button->getRect().mTop, + button->getRect().mLeft, + button->getRect().mBottom)); + button->setAutoResize(true); + button->autoResize(); + offset += HPAD + button->getRect().getWidth(); + button->setFollowsNone(); + } + } + + if (mParentText) + { + mParentText->needsReflow(); + } } void LLIMToastNotifyPanel::updateNotification() - { - init(LLRect(), true); - } + { + init(LLRect(), true); + } void LLIMToastNotifyPanel::init( LLRect rect, bool show_images ) { - LLToastNotifyPanel::init(LLRect(), show_images); + LLToastNotifyPanel::init(LLRect(), show_images); - compactButtons(); + compactButtons(); } // EOF |