diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp index 5461ad8aeb..d40d188e54 100644 --- a/indra/llrender/llfontgl.cpp +++ b/indra/llrender/llfontgl.cpp @@ -432,7 +432,8 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons // recursively render ellipses at end of string // we've already reserved enough room gGL.pushUIMatrix(); - renderUTF8(std::string("..."), + static LLWString elipses_wstr(utf8string_to_wstring(std::string("..."))); + render(elipses_wstr, 0, (cur_x - origin.mV[VX]) / sScaleX, (F32)y, color, diff --git a/indra/llui/llbadge.cpp b/indra/llui/llbadge.cpp index d06a813b8b..fe66f2ac63 100644 --- a/indra/llui/llbadge.cpp +++ b/indra/llui/llbadge.cpp @@ -243,8 +243,6 @@ void LLBadge::draw() // Calculate badge size based on label text // - LLWString badge_label_wstring = mLabel; - S32 badge_label_begin_offset = 0; S32 badge_char_length = S32_MAX; S32 badge_pixel_length = S32_MAX; @@ -252,7 +250,7 @@ void LLBadge::draw() bool do_not_use_ellipses = false; F32 badge_width = (2.0f * mPaddingHoriz) + - mGLFont->getWidthF32(badge_label_wstring.c_str(), badge_label_begin_offset, badge_char_length); + mGLFont->getWidthF32(mLabel.getWString().c_str(), badge_label_begin_offset, badge_char_length); F32 badge_height = (2.0f * mPaddingVert) + mGLFont->getLineHeight(); @@ -366,7 +364,7 @@ void LLBadge::draw() // Draw the label // - mGLFont->render(badge_label_wstring, + mGLFont->render(mLabel.getWString(), badge_label_begin_offset, badge_center_x + mLabelOffsetHoriz, badge_center_y + mLabelOffsetVert, diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp index 7a411ebb47..f2e807cee3 100644 --- a/indra/llui/llbutton.cpp +++ b/indra/llui/llbutton.cpp @@ -860,9 +860,6 @@ void LLButton::draw() if( ll::ui::SearchableControl::getHighlighted() ) label_color = ll::ui::SearchableControl::getHighlightColor(); - // Unselected label assignments - LLWString label = getCurrentLabel(); - // overlay with keyboard focus border if (hasFocus()) { @@ -993,8 +990,9 @@ void LLButton::draw() } // Draw label - if( !label.empty() ) + if( !getCurrentLabel().empty() ) // Unselected label assignments { + LLWString label = getCurrentLabel(); LLWStringUtil::trim(label); S32 x; @@ -1157,10 +1155,10 @@ void LLButton::autoResize() resize(getCurrentLabel()); } -void LLButton::resize(LLUIString label) +void LLButton::resize(const LLUIString& label) { // get label length - S32 label_width = mGLFont->getWidth(label.getString()); + S32 label_width = mGLFont->getWidth(label.getWString().c_str()); // get current btn length S32 btn_width =getRect().getWidth(); // check if it need resize diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h index 95e1e6c1f6..4418d50a25 100644 --- a/indra/llui/llbutton.h +++ b/indra/llui/llbutton.h @@ -249,7 +249,7 @@ public: void setImageOverlaySelectedColor(const LLColor4& color) { mImageOverlaySelectedColor = color; } void autoResize(); // resize with label of current btn state - void resize(LLUIString label); // resize with label input + void resize(const LLUIString& label); // resize with label input void setLabel(const std::string& label); void setLabel(const LLUIString& label); void setLabel( const LLStringExplicit& label); diff --git a/indra/llui/llconsole.cpp b/indra/llui/llconsole.cpp index b5dd6f7a94..e9236d759b 100644 --- a/indra/llui/llconsole.cpp +++ b/indra/llui/llconsole.cpp @@ -222,7 +222,7 @@ void LLConsole::draw() //static LLCachedControl console_bg_opacity(*LLUI::getInstance()->mSettingGroups["config"], "ConsoleBackgroundOpacity", 0.7f); //F32 console_opacity = llclamp(console_bg_opacity(), 0.f, 1.f); - //LLColor4 color = LLUIColorTable::instance().getColor("ConsoleBackground"); + //static LLColor4 color = LLUIColorTable::instance().getColor("ConsoleBackground"); //color.mV[VALPHA] *= console_opacity; //F32 line_height = (F32)mFont->getLineHeight(); diff --git a/indra/llui/llcontainerview.cpp b/indra/llui/llcontainerview.cpp index fefbb1933b..70d8521676 100644 --- a/indra/llui/llcontainerview.cpp +++ b/indra/llui/llcontainerview.cpp @@ -46,7 +46,7 @@ static ContainerViewRegistry::Register r3("panel", &LLPanel::fromXML); LLContainerView::LLContainerView(const LLContainerView::Params& p) : LLView(p), mShowLabel(p.show_label), - mLabel(p.label), + mLabel(utf8str_to_wstring(p.label)), // Add background visible flag and color to container_view so we can have blank scrollview containers mBackgroundVisible(p.background_visible), mBackgroundColor(p.bg_color), @@ -128,8 +128,8 @@ void LLContainerView::draw() // Draw the label if (mShowLabel) { - LLFontGL::getFontMonospace()->renderUTF8( - mLabel, 0, 2, getRect().getHeight() - 2, LLColor4(1,1,1,1), LLFontGL::LEFT, LLFontGL::TOP); + LLFontGL::getFontMonospace()->render( + mLabel, 0, 2.f, (F32)(getRect().getHeight() - 2), LLColor4(1,1,1,1), LLFontGL::LEFT, LLFontGL::TOP); } LLView::draw(); @@ -293,7 +293,7 @@ LLRect LLContainerView::getRequiredRect() void LLContainerView::setLabel(const std::string& label) { - mLabel = label; + mLabel = utf8str_to_wstring(label); } void LLContainerView::setDisplayChildren(bool displayChildren) diff --git a/indra/llui/llcontainerview.h b/indra/llui/llcontainerview.h index 5321a8336a..9585fb127f 100644 --- a/indra/llui/llcontainerview.h +++ b/indra/llui/llcontainerview.h @@ -97,7 +97,7 @@ public: protected: bool mDisplayChildren; - std::string mLabel; + LLWString mLabel; // Add background visible flag and color to container_view so we can have blank scrollview containers bool mBackgroundVisible; LLUIColor mBackgroundColor; diff --git a/indra/llui/llfolderview.cpp b/indra/llui/llfolderview.cpp index cd43dd032f..e6374d3f39 100644 --- a/indra/llui/llfolderview.cpp +++ b/indra/llui/llfolderview.cpp @@ -215,7 +215,7 @@ LLFolderView::LLFolderView(const Params& p) //clear label // go ahead and render root folder as usual // just make sure the label ("Inventory Folder") never shows up - mLabel = LLStringUtil::null; + mLabel.clear(); // Escape is handled by reverting the rename, not commiting it (default behavior) LLLineEditor::Params params; diff --git a/indra/llui/llfolderviewitem.cpp b/indra/llui/llfolderviewitem.cpp index 05dcf41699..2797e16cb7 100644 --- a/indra/llui/llfolderviewitem.cpp +++ b/indra/llui/llfolderviewitem.cpp @@ -147,7 +147,7 @@ LLFolderViewItem::LLFolderViewItem(const LLFolderViewItem::Params& p) mItemHeight(p.item_height), mControlLabelRotation(0.f), mDragAndDropTarget(false), - mLabel(p.name), + mLabel(utf8str_to_wstring(p.name)), mRoot(p.root), mViewModelItem(p.listener), mIsMouseOverTitle(false), @@ -212,7 +212,7 @@ bool LLFolderViewItem::postBuild() { // getDisplayName() is expensive (due to internal getLabelSuffix() and name building) // it also sets search strings so it requires a filter reset - mLabel = vmi->getDisplayName(); + mLabel = utf8str_to_wstring(vmi->getDisplayName()); setToolTip(vmi->getName()); // Dirty the filter flag of the model from the view (CHUI-849) @@ -325,7 +325,7 @@ void LLFolderViewItem::refresh() { LLFolderViewModelItem& vmi = *getViewModelItem(); - mLabel = vmi.getDisplayName(); + mLabel = utf8str_to_wstring(vmi.getDisplayName()); setToolTip(vmi.getName()); // icons are slightly expensive to get, can be optimized // see LLInventoryIcon::getIcon() @@ -338,7 +338,7 @@ void LLFolderViewItem::refresh() // Very Expensive! // Can do a number of expensive checks, like checking active motions, wearables or friend list mLabelStyle = vmi.getLabelStyle(); - mLabelSuffix = vmi.getLabelSuffix(); + mLabelSuffix = utf8str_to_wstring(vmi.getLabelSuffix()); } // Dirty the filter flag of the model from the view (CHUI-849) @@ -363,7 +363,7 @@ void LLFolderViewItem::refreshSuffix() // Very Expensive! // Can do a number of expensive checks, like checking active motions, wearables or friend list mLabelStyle = vmi->getLabelStyle(); - mLabelSuffix = vmi->getLabelSuffix(); + mLabelSuffix = utf8str_to_wstring(vmi->getLabelSuffix()); } mLabelWidthDirty = true; @@ -442,7 +442,7 @@ S32 LLFolderViewItem::arrange( S32* width, S32* height ) // it is purely visual, so it is fine to do at our laisure refreshSuffix(); } - mLabelWidth = getLabelXPos() + getLabelFontForStyle(mLabelStyle)->getWidth(mLabel) + getLabelFontForStyle(LLFontGL::NORMAL)->getWidth(mLabelSuffix) + mLabelPaddingRight; + mLabelWidth = getLabelXPos() + getLabelFontForStyle(mLabelStyle)->getWidth(mLabel.c_str()) + getLabelFontForStyle(LLFontGL::NORMAL)->getWidth(mLabelSuffix.c_str()) + mLabelPaddingRight; mLabelWidthDirty = false; } @@ -959,7 +959,7 @@ void LLFolderViewItem::drawLabel(const LLFontGL * font, const F32 x, const F32 y //--------------------------------------------------------------------------------// // Draw the actual label text // - font->renderUTF8(mLabel, 0, x, y, color, + font->render(mLabel, 0, x, y, color, LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, getRect().getWidth() - (S32) x - mLabelPaddingRight, &right_x, /*use_ellipses*/true); } @@ -1015,7 +1015,7 @@ void LLFolderViewItem::draw() F32 right_x = 0; F32 y = (F32)getRect().getHeight() - font->getLineHeight() - (F32)mTextPad - (F32)TOP_PAD; F32 text_left = (F32)getLabelXPos(); - std::string combined_string = mLabel + mLabelSuffix; + LLWString combined_string = mLabel + mLabelSuffix; const LLFontGL* suffix_font = getLabelFontForStyle(LLFontGL::NORMAL); S32 filter_offset = static_cast(mViewModelItem->getFilterStringOffset()); @@ -1025,8 +1025,8 @@ void LLFolderViewItem::draw() S32 top = getRect().getHeight() - TOP_PAD; if(mLabelSuffix.empty() || (font == suffix_font)) { - S32 left = ll_round(text_left) + font->getWidth(combined_string, 0, static_cast(mViewModelItem->getFilterStringOffset())) - 2; - S32 right = left + font->getWidth(combined_string, static_cast(mViewModelItem->getFilterStringOffset()), filter_string_length) + 2; + S32 left = ll_round(text_left) + font->getWidth(combined_string.c_str(), 0, static_cast(mViewModelItem->getFilterStringOffset())) - 2; + S32 right = left + font->getWidth(combined_string.c_str(), static_cast(mViewModelItem->getFilterStringOffset()), filter_string_length) + 2; LLUIImage* box_image = default_params.selection_image; LLRect box_rect(left, top, right, bottom); @@ -1037,8 +1037,8 @@ void LLFolderViewItem::draw() S32 label_filter_length = llmin((S32)mLabel.size() - filter_offset, (S32)filter_string_length); if(label_filter_length > 0) { - S32 left = (S32)(ll_round(text_left) + font->getWidthF32(mLabel, 0, llmin(filter_offset, (S32)mLabel.size()))) - 2; - S32 right = left + (S32)font->getWidthF32(mLabel, filter_offset, label_filter_length) + 2; + S32 left = (S32)(ll_round(text_left) + font->getWidthF32(mLabel.c_str(), 0, llmin(filter_offset, (S32)mLabel.size()))) - 2; + S32 right = left + (S32)font->getWidthF32(mLabel.c_str(), filter_offset, label_filter_length) + 2; LLUIImage* box_image = default_params.selection_image; LLRect box_rect(left, top, right, bottom); box_image->draw(box_rect, sFilterBGColor); @@ -1047,8 +1047,8 @@ void LLFolderViewItem::draw() if(suffix_filter_length > 0) { S32 suffix_offset = llmax(0, filter_offset - (S32)mLabel.size()); - S32 left = (S32)(ll_round(text_left) + font->getWidthF32(mLabel, 0, static_cast(mLabel.size())) + suffix_font->getWidthF32(mLabelSuffix, 0, suffix_offset))- 2; - S32 right = left + (S32)suffix_font->getWidthF32(mLabelSuffix, suffix_offset, suffix_filter_length) + 2; + S32 left = (S32)(ll_round(text_left) + font->getWidthF32(mLabel.c_str(), 0, static_cast(mLabel.size())) + suffix_font->getWidthF32(mLabelSuffix.c_str(), 0, suffix_offset)) - 2; + S32 right = left + (S32)suffix_font->getWidthF32(mLabelSuffix.c_str(), suffix_offset, suffix_filter_length) + 2; LLUIImage* box_image = default_params.selection_image; LLRect box_rect(left, top, right, bottom); box_image->draw(box_rect, sFilterBGColor); @@ -1090,7 +1090,7 @@ void LLFolderViewItem::draw() // if (!mLabelSuffix.empty()) { - suffix_font->renderUTF8( mLabelSuffix, 0, right_x, y, isFadeItem() ? color : (LLColor4)sSuffixColor, + suffix_font->render( mLabelSuffix, 0, right_x, y, isFadeItem() ? color : (LLColor4)sSuffixColor, LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, &right_x); } @@ -1102,9 +1102,9 @@ void LLFolderViewItem::draw() { if(mLabelSuffix.empty() || (font == suffix_font)) { - F32 match_string_left = text_left + font->getWidthF32(combined_string, 0, filter_offset + filter_string_length) - font->getWidthF32(combined_string, filter_offset, filter_string_length); + F32 match_string_left = text_left + font->getWidthF32(combined_string.c_str(), 0, filter_offset + filter_string_length) - font->getWidthF32(combined_string.c_str(), filter_offset, filter_string_length); F32 yy = (F32)getRect().getHeight() - font->getLineHeight() - (F32)mTextPad - (F32)TOP_PAD; - font->renderUTF8(combined_string, filter_offset, match_string_left, yy, + font->render(combined_string, filter_offset, match_string_left, yy, sFilterTextColor, LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, filter_string_length, S32_MAX, &right_x); } @@ -1113,9 +1113,9 @@ void LLFolderViewItem::draw() S32 label_filter_length = llmin((S32)mLabel.size() - filter_offset, (S32)filter_string_length); if(label_filter_length > 0) { - F32 match_string_left = text_left + font->getWidthF32(mLabel, 0, filter_offset + label_filter_length) - font->getWidthF32(mLabel, filter_offset, label_filter_length); + F32 match_string_left = text_left + font->getWidthF32(mLabel.c_str(), 0, filter_offset + label_filter_length) - font->getWidthF32(mLabel.c_str(), filter_offset, label_filter_length); F32 yy = (F32)getRect().getHeight() - font->getLineHeight() - (F32)mTextPad - (F32)TOP_PAD; - font->renderUTF8(mLabel, filter_offset, match_string_left, yy, + font->render(mLabel, filter_offset, match_string_left, yy, sFilterTextColor, LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, label_filter_length, S32_MAX, &right_x); } @@ -1124,9 +1124,9 @@ void LLFolderViewItem::draw() if(suffix_filter_length > 0) { S32 suffix_offset = llmax(0, filter_offset - (S32)mLabel.size()); - F32 match_string_left = text_left + font->getWidthF32(mLabel, 0, static_cast(mLabel.size())) + suffix_font->getWidthF32(mLabelSuffix, 0, suffix_offset + suffix_filter_length) - suffix_font->getWidthF32(mLabelSuffix, suffix_offset, suffix_filter_length); + F32 match_string_left = text_left + font->getWidthF32(mLabel.c_str(), 0, static_cast(mLabel.size())) + suffix_font->getWidthF32(mLabelSuffix.c_str(), 0, suffix_offset + suffix_filter_length) - suffix_font->getWidthF32(mLabelSuffix.c_str(), suffix_offset, suffix_filter_length); F32 yy = (F32)getRect().getHeight() - suffix_font->getLineHeight() - (F32)mTextPad - (F32)TOP_PAD; - suffix_font->renderUTF8(mLabelSuffix, suffix_offset, match_string_left, yy, sFilterTextColor, + suffix_font->render(mLabelSuffix, suffix_offset, match_string_left, yy, sFilterTextColor, LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, suffix_filter_length, S32_MAX, &right_x); } @@ -1161,11 +1161,11 @@ bool LLFolderViewItem::handleToolTip(S32 x, S32 y, MASK mask) return false; S32 nStart = mArrowSize + mTextPad + mIconWidth + mIconPad + mIndentation; - S32 nWidth = getLabelFontForStyle(mLabelStyle)->getWidth(mLabel) + nStart; + S32 nWidth = getLabelFontForStyle(mLabelStyle)->getWidth(mLabel.c_str()) + nStart; if (getRoot()->getParentPanel()->getRect().getWidth() < nWidth) // Label is truncated, display tooltip { - setToolTip(mLabel); + setToolTip(wstring_to_utf8str(mLabel)); return LLView::handleToolTip(x, y, mask); } else diff --git a/indra/llui/llfolderviewitem.h b/indra/llui/llfolderviewitem.h index 915dd32ca2..1539169e68 100644 --- a/indra/llui/llfolderviewitem.h +++ b/indra/llui/llfolderviewitem.h @@ -93,14 +93,14 @@ protected: LLFolderViewItem(const Params& p); - std::string mLabel; + LLWString mLabel; S32 mLabelWidth; bool mLabelWidthDirty; S32 mLabelPaddingRight; LLFolderViewFolder* mParentFolder; LLPointer mViewModelItem; LLFontGL::StyleFlags mLabelStyle; - std::string mLabelSuffix; + LLWString mLabelSuffix; bool mSuffixNeedsRefresh; //suffix and icons LLUIImagePtr mIcon, mIconOpen, @@ -252,7 +252,7 @@ public: // This method returns the label displayed on the view. This // method was primarily added to allow sorting on the folder // contents possible before the entire view has been constructed. - const std::string& getLabel() const { return mLabel; } + const LLWString& getLabel() const { return mLabel; } LLFolderViewFolder* getParentFolder( void ) { return mParentFolder; } const LLFolderViewFolder* getParentFolder( void ) const { return mParentFolder; } diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp index d691a3e417..6fffea386f 100644 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -566,8 +566,8 @@ void LLMenuItemGL::draw( void ) std::string::size_type offset = upper_case_label.find(mJumpKey); if (offset != std::string::npos) { - S32 x_begin = LEFT_PLAIN_PIXELS + mFont->getWidth(mLabel, 0, static_cast(offset)); - S32 x_end = LEFT_PLAIN_PIXELS + mFont->getWidth(mLabel, 0, static_cast(offset) + 1); + S32 x_begin = LEFT_PLAIN_PIXELS + mFont->getWidth(mLabel.getWString().c_str(), 0, static_cast(offset)); + S32 x_end = LEFT_PLAIN_PIXELS + mFont->getWidth(mLabel.getWString().c_str(), 0, static_cast(offset) + 1); gl_line_2d(x_begin, (MENU_ITEM_PADDING / 2) + 1, x_end, (MENU_ITEM_PADDING / 2) + 1); } } @@ -1671,9 +1671,9 @@ void LLMenuItemBranchDownGL::draw( void ) std::string::size_type offset = upper_case_label.find(getJumpKey()); if (offset != std::string::npos) { - S32 x_offset = ll_round((F32)getRect().getWidth() / 2.f - getFont()->getWidthF32(mLabel.getString(), 0, S32_MAX) / 2.f); - S32 x_begin = x_offset + getFont()->getWidth(mLabel, 0, static_cast(offset)); - S32 x_end = x_offset + getFont()->getWidth(mLabel, 0, static_cast(offset) + 1); + S32 x_offset = ll_round((F32)getRect().getWidth() / 2.f - getFont()->getWidthF32(mLabel.getWString().c_str(), 0, S32_MAX) / 2.f); + S32 x_begin = x_offset + getFont()->getWidth(mLabel.getWString().c_str(), 0, static_cast(offset)); + S32 x_end = x_offset + getFont()->getWidth(mLabel.getWString().c_str(), 0, static_cast(offset) + 1); gl_line_2d(x_begin, LABEL_BOTTOM_PAD_PIXELS, x_end, LABEL_BOTTOM_PAD_PIXELS); } } diff --git a/indra/llui/llmultisliderctrl.cpp b/indra/llui/llmultisliderctrl.cpp index 01e2fc6ac9..6b9a1b1c13 100644 --- a/indra/llui/llmultisliderctrl.cpp +++ b/indra/llui/llmultisliderctrl.cpp @@ -245,7 +245,7 @@ bool LLMultiSliderCtrl::setLabelArg( const std::string& key, const LLStringExpli res = mLabelBox->setTextArg(key, text); if (res && mLabelWidth == 0) { - S32 label_width = mFont->getWidth(mLabelBox->getText()); + S32 label_width = mFont->getWidth(mLabelBox->getWText().c_str()); LLRect rect = mLabelBox->getRect(); S32 prev_right = rect.mRight; rect.mRight = rect.mLeft + label_width; diff --git a/indra/llui/llscrolllistcell.cpp b/indra/llui/llscrolllistcell.cpp index 5dccf9a8ba..88ef4eb0c1 100644 --- a/indra/llui/llscrolllistcell.cpp +++ b/indra/llui/llscrolllistcell.cpp @@ -305,7 +305,7 @@ bool LLScrollListText::needsToolTip() const return LLScrollListCell::needsToolTip(); // ...otherwise, show tooltips for truncated text - return mFont->getWidth(mText.getString()) > getWidth(); + return mFont->getWidth(mText.getWString().c_str()) > getWidth(); } //virtual @@ -328,7 +328,7 @@ LLScrollListText::~LLScrollListText() S32 LLScrollListText::getContentWidth() const { - return mFont->getWidth(mText.getString()); + return mFont->getWidth(mText.getWString().c_str()); } @@ -394,18 +394,18 @@ void LLScrollListText::draw(const LLColor4& color, const LLColor4& highlight_col switch(mFontAlignment) { case LLFontGL::LEFT: - left = mFont->getWidth(mText.getString(), 1, mHighlightOffset); + left = mFont->getWidth(mText.getWString().c_str(), 1, mHighlightOffset); break; case LLFontGL::RIGHT: - left = getWidth() - mFont->getWidth(mText.getString(), mHighlightOffset, S32_MAX); + left = getWidth() - mFont->getWidth(mText.getWString().c_str(), mHighlightOffset, S32_MAX); break; case LLFontGL::HCENTER: - left = (getWidth() - mFont->getWidth(mText.getString())) / 2; + left = (getWidth() - mFont->getWidth(mText.getWString().c_str())) / 2; break; } LLRect highlight_rect(left - 2, mFont->getLineHeight() + 1, - left + mFont->getWidth(mText.getString(), mHighlightOffset, mHighlightCount) + 1, + left + mFont->getWidth(mText.getWString().c_str(), mHighlightOffset, mHighlightCount) + 1, 1); mRoundedRectImage->draw(highlight_rect, highlight_color); } @@ -613,18 +613,18 @@ void LLScrollListIconText::draw(const LLColor4& color, const LLColor4& highlight switch (mFontAlignment) { case LLFontGL::LEFT: - left = mFont->getWidth(mText.getString(), icon_space + 1, mHighlightOffset); + left = mFont->getWidth(mText.getWString().c_str(), icon_space + 1, mHighlightOffset); break; case LLFontGL::RIGHT: - left = getWidth() - mFont->getWidth(mText.getString(), mHighlightOffset, S32_MAX) - icon_space; + left = getWidth() - mFont->getWidth(mText.getWString().c_str(), mHighlightOffset, S32_MAX) - icon_space; break; case LLFontGL::HCENTER: - left = (getWidth() - mFont->getWidth(mText.getString()) - icon_space) / 2; + left = (getWidth() - mFont->getWidth(mText.getWString().c_str()) - icon_space) / 2; break; } LLRect highlight_rect(left - 2, mFont->getLineHeight() + 1, - left + mFont->getWidth(mText.getString(), mHighlightOffset, mHighlightCount) + 1, + left + mFont->getWidth(mText.getWString().c_str(), mHighlightOffset, mHighlightCount) + 1, 1); mRoundedRectImage->draw(highlight_rect, highlight_color); } @@ -642,12 +642,12 @@ void LLScrollListIconText::draw(const LLColor4& color, const LLColor4& highlight break; case LLFontGL::RIGHT: start_text_x = (F32)getWidth(); - start_icon_x = getWidth() - mFont->getWidth(mText.getString()) - icon_space; + start_icon_x = getWidth() - mFont->getWidth(mText.getWString().c_str()) - icon_space; break; case LLFontGL::HCENTER: F32 center = (F32)getWidth()* 0.5f; start_text_x = center + ((F32)icon_space * 0.5f); - start_icon_x = (S32)(center - (((F32)icon_space + mFont->getWidth(mText.getString())) * 0.5f)); + start_icon_x = (S32)(center - (((F32)icon_space + mFont->getWidth(mText.getWString().c_str())) * 0.5f)); break; } mFont->render(mText.getWString(), 0, diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp index 37a0d31974..67f7b05900 100644 --- a/indra/llui/llscrolllistctrl.cpp +++ b/indra/llui/llscrolllistctrl.cpp @@ -749,7 +749,7 @@ S32 LLScrollListCtrl::calcMaxContentWidth() if (mColumnWidthsDirty) { // update max content width for this column, by looking at all items - column->mMaxContentWidth = column->mHeader ? LLFontGL::getFontSansSerifSmall()->getWidth(column->mLabel) + mColumnPadding + HEADING_TEXT_PADDING : 0; + column->mMaxContentWidth = column->mHeader ? LLFontGL::getFontSansSerifSmall()->getWidth(column->mLabel.getWString().c_str()) + mColumnPadding + HEADING_TEXT_PADDING : 0; item_list::iterator iter; for (iter = mItemList.begin(); iter != mItemList.end(); iter++) { diff --git a/indra/llui/llsliderctrl.cpp b/indra/llui/llsliderctrl.cpp index 22579205d8..0c3ab6bda0 100644 --- a/indra/llui/llsliderctrl.cpp +++ b/indra/llui/llsliderctrl.cpp @@ -225,7 +225,7 @@ bool LLSliderCtrl::setLabelArg( const std::string& key, const LLStringExplicit& res = mLabelBox->setTextArg(key, text); if (res && mLabelFont && mLabelWidth == 0) { - S32 label_width = mLabelFont->getWidth(mLabelBox->getText()); + S32 label_width = mLabelFont->getWidth(mLabelBox->getWText().c_str()); LLRect rect = mLabelBox->getRect(); S32 prev_right = rect.mRight; rect.mRight = rect.mLeft + label_width; diff --git a/indra/llui/llstatbar.cpp b/indra/llui/llstatbar.cpp index 2ee82d23af..732f1c5928 100644 --- a/indra/llui/llstatbar.cpp +++ b/indra/llui/llstatbar.cpp @@ -676,7 +676,7 @@ LLRect LLStatBar::getRequiredRect() void LLStatBar::drawLabelAndValue( F32 value, std::string &label, LLRect &bar_rect, S32 decimal_digits ) { - LLFontGL::getFontMonospace()->renderUTF8(mLabel, 0, 0, getRect().getHeight(), LLColor4(1.f, 1.f, 1.f, 1.f), + LLFontGL::getFontMonospace()->render(mLabel.getWString(), 0, 0.F, (F32)getRect().getHeight(), LLColor4(1.f, 1.f, 1.f, 1.f), LLFontGL::LEFT, LLFontGL::TOP); std::string value_str = !llisnan(value) @@ -758,14 +758,14 @@ void LLStatBar::drawTicks( F32 min, F32 max, F32 value_scale, LLRect &bar_rect ) { decimal_digits = 0; } - std::string tick_label = llformat("%.*f", decimal_digits, tick_value); - S32 tick_label_width = LLFontGL::getFontMonospace()->getWidth(tick_label); + LLWString tick_label = utf8str_to_wstring(llformat("%.*f", decimal_digits, tick_value)); + S32 tick_label_width = LLFontGL::getFontMonospace()->getWidth(tick_label.c_str()); if (mOrientation == HORIZONTAL) { if (tick_begin > last_label + MIN_LABEL_SPACING) { gl_rect_2d(bar_rect.mLeft, tick_end, bar_rect.mRight - TICK_LENGTH, tick_begin, LLColor4(1.f, 1.f, 1.f, 0.25f)); - LLFontGL::getFontMonospace()->renderUTF8(tick_label, 0, bar_rect.mRight, tick_begin, + LLFontGL::getFontMonospace()->render(tick_label, 0, (F32)bar_rect.mRight, (F32)tick_begin, LLColor4(1.f, 1.f, 1.f, 0.5f), LLFontGL::LEFT, LLFontGL::VCENTER); last_label = tick_begin; @@ -781,7 +781,7 @@ void LLStatBar::drawTicks( F32 min, F32 max, F32 value_scale, LLRect &bar_rect ) { gl_rect_2d(tick_begin, bar_rect.mTop, tick_end, bar_rect.mBottom - TICK_LENGTH, LLColor4(1.f, 1.f, 1.f, 0.25f)); S32 label_pos = tick_begin - ll_round((F32)tick_label_width * ((F32)tick_begin / (F32)bar_rect.getWidth())); - LLFontGL::getFontMonospace()->renderUTF8(tick_label, 0, label_pos, bar_rect.mBottom - TICK_LENGTH, + LLFontGL::getFontMonospace()->render(tick_label, 0, (F32)label_pos, (F32)(bar_rect.mBottom - TICK_LENGTH), LLColor4(1.f, 1.f, 1.f, 0.5f), LLFontGL::LEFT, LLFontGL::TOP); last_label = label_pos; diff --git a/indra/llui/llstatgraph.cpp b/indra/llui/llstatgraph.cpp index 73329ed442..3dc1be7df8 100644 --- a/indra/llui/llstatgraph.cpp +++ b/indra/llui/llstatgraph.cpp @@ -107,8 +107,6 @@ void LLStatGraph::draw() mUpdateTimer.reset(); } - LLColor4 color; - threshold_vec_t::iterator it = std::lower_bound(mThresholds.begin(), mThresholds.end(), Threshold(mValue / mMax, LLUIColor())); if (it != mThresholds.begin()) @@ -116,15 +114,14 @@ void LLStatGraph::draw() it--; } - color = LLUIColorTable::instance().getColor( "MenuDefaultBgColor" ); - gGL.color4fv(color.mV); + static LLColor4 default_color = LLUIColorTable::instance().getColor( "MenuDefaultBgColor" ); + gGL.color4fv(default_color.mV); gl_rect_2d(0, getRect().getHeight(), getRect().getWidth(), 0, true); gGL.color4fv(LLColor4::black.mV); gl_rect_2d(0, getRect().getHeight(), getRect().getWidth(), 0, false); - color = it->mColor; - gGL.color4fv(color.mV); + gGL.color4fv(it->mColor().mV); gl_rect_2d(1, ll_round(frac*getRect().getHeight()), getRect().getWidth() - 1, 0, true); } diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp index 42fe8fc6e6..748e10160c 100644 --- a/indra/newview/llexpandabletextbox.cpp +++ b/indra/newview/llexpandabletextbox.cpp @@ -41,7 +41,7 @@ public: : LLTextSegment(start, end), mEditor(editor), mStyle(style), - mExpanderLabel(more_text) + mExpanderLabel(utf8str_to_wstring(more_text)) {} /*virtual*/ bool getDimensionsF32(S32 first_char, S32 num_chars, F32& width, S32& height) const @@ -80,7 +80,7 @@ public: /*virtual*/ F32 draw(S32 start, S32 end, S32 selection_start, S32 selection_end, const LLRectf& draw_rect) { F32 right_x; - mStyle->getFont()->renderUTF8(mExpanderLabel, start, + mStyle->getFont()->render(mExpanderLabel, start, draw_rect.mRight, draw_rect.mTop, mStyle->getColor(), LLFontGL::RIGHT, LLFontGL::TOP, @@ -103,7 +103,7 @@ public: private: LLTextBase& mEditor; LLStyleSP mStyle; - std::string mExpanderLabel; + LLWString mExpanderLabel; }; LLExpandableTextBox::LLTextBoxEx::Params::Params() diff --git a/indra/newview/llfloaterconversationlog.cpp b/indra/newview/llfloaterconversationlog.cpp index 912d0a33a8..01e5fb7e69 100644 --- a/indra/newview/llfloaterconversationlog.cpp +++ b/indra/newview/llfloaterconversationlog.cpp @@ -60,10 +60,11 @@ bool LLFloaterConversationLog::postBuild() } // Use the context menu of the Conversation list for the Conversation tab gear menu. + mConversationsGearBtn = getChild("conversations_gear_btn"); LLToggleableMenu* conversations_gear_menu = mConversationLogList->getContextMenu(); if (conversations_gear_menu) { - getChild("conversations_gear_btn")->setMenu(conversations_gear_menu, LLMenuButton::MP_BOTTOM_LEFT); + mConversationsGearBtn->setMenu(conversations_gear_menu, LLMenuButton::MP_BOTTOM_LEFT); } getChild("people_filter_input")->setCommitCallback(boost::bind(&LLFloaterConversationLog::onFilterEdit, this, _2)); @@ -73,7 +74,7 @@ bool LLFloaterConversationLog::postBuild() void LLFloaterConversationLog::draw() { - getChild("conversations_gear_btn")->setEnabled(mConversationLogList->getSelectedItem() != NULL); + mConversationsGearBtn->setEnabled(mConversationLogList->getSelectedItem() != NULL); LLFloater::draw(); } diff --git a/indra/newview/llfloaterconversationlog.h b/indra/newview/llfloaterconversationlog.h index fe1e65188a..ca4a775384 100644 --- a/indra/newview/llfloaterconversationlog.h +++ b/indra/newview/llfloaterconversationlog.h @@ -29,6 +29,7 @@ #include "llfloater.h" class LLConversationLogList; +class LLMenuButton; class LLFloaterConversationLog : public LLFloater { @@ -55,6 +56,7 @@ private: bool isActionChecked(const LLSD& userdata); LLConversationLogList* mConversationLogList; + LLMenuButton* mConversationsGearBtn = nullptr; }; diff --git a/indra/newview/llgroupmgr.cpp b/indra/newview/llgroupmgr.cpp index b938924b0d..9db3fe1744 100644 --- a/indra/newview/llgroupmgr.cpp +++ b/indra/newview/llgroupmgr.cpp @@ -2188,9 +2188,11 @@ void LLGroupMgr::processGroupBanRequest(const LLSD& content) LLGroupMgr::getInstance()->notifyObservers(GC_BANLIST); } -void LLGroupMgr::groupMembersRequestCoro(std::string url, LLUUID group_id, U32 page_size, U32 page_start, std::string sort_column) +void LLGroupMgr::groupMembersRequestCoro(std::string url, LLUUID group_id, U32 page_size, U32 page_start, U32 sort_column, bool sort_descending) { - LL_INFOS("GrpMgr") << "group_id: '" << group_id << "', sort_column: '" << sort_column << "', page_size: " << page_size << ", page_start: " << page_start << LL_ENDL; + LL_INFOS("GrpMgr") << "group_id: '" << group_id << "'" + << ", page_size: " << page_size << ", page_start: " << page_start + << ", sort_column: " << sort_column << ", sort_descending: " << sort_descending << LL_ENDL; LLCore::HttpRequest::policy_t httpPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID); LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t httpAdapter(new LLCoreHttpUtil::HttpCoroutineAdapter("groupMembersRequest", httpPolicy)); @@ -2199,6 +2201,7 @@ void LLGroupMgr::groupMembersRequestCoro(std::string url, LLUUID group_id, U32 p LLSD postData = LLSD::emptyMap(); postData["group_id"] = group_id; + if (page_size) { postData["page_size"] = LLSD::Integer(page_size); @@ -2206,12 +2209,19 @@ void LLGroupMgr::groupMembersRequestCoro(std::string url, LLUUID group_id, U32 p { postData["page_start"] = LLSD::Integer(page_start); } - if (!sort_column.empty()) + } + + if (sort_column) + { + postData["sort_column"] = LLSD::Integer(sort_column); + if (sort_descending) { - postData["sort_column"] = sort_column; + postData["sort_descending"] = 1; } } + mMemberRequestInFlight = true; + LLSD response = httpAdapter->postAndSuspend(httpRequest, url, postData, httpOpts); mMemberRequestInFlight = false; @@ -2226,10 +2236,10 @@ void LLGroupMgr::groupMembersRequestCoro(std::string url, LLUUID group_id, U32 p } response.erase(LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS); - processCapGroupMembersResponse(response, page_size, page_start, sort_column); + processCapGroupMembersResponse(response, url, page_size, page_start, sort_column, sort_descending); } -void LLGroupMgr::sendCapGroupMembersRequest(const LLUUID& group_id, U32 page_size, U32 page_start, const std::string& sort_column) +void LLGroupMgr::sendCapGroupMembersRequest(const LLUUID& group_id, U32 page_size, U32 page_start, const std::string& sort_column_name, bool sort_descending) { static U32 lastGroupMemberRequestFrame = 0; @@ -2238,6 +2248,10 @@ void LLGroupMgr::sendCapGroupMembersRequest(const LLUUID& group_id, U32 page_siz if ((lastGroupMemberRequestFrame == gFrameCount) || mMemberRequestInFlight) return; + LL_INFOS("GrpMgr") << "group_id: '" << group_id << "'" + << ", page_size: " << page_size << ", page_start: " << page_start + << ", sort_column_name: '" << sort_column_name << "', sort_descending: " << sort_descending << LL_ENDL; + LLViewerRegion* currentRegion = gAgent.getRegion(); // Thank you FS:Ansariel! if (!currentRegion) @@ -2269,18 +2283,34 @@ void LLGroupMgr::sendCapGroupMembersRequest(const LLUUID& group_id, U32 page_siz lastGroupMemberRequestFrame = gFrameCount; - mMemberRequestInFlight = true; + U32 sort_column = 0; // No sorting by default + if (!sort_column_name.empty()) + { + static const std::vector column_names = { "name", "donated", "online", "title" }; + auto it = std::find(column_names.begin(), column_names.end(), sort_column_name); + if (it == column_names.end()) + { + LL_WARNS("GrpMgr") << "Invalid column name: '" << sort_column_name << "'" << LL_ENDL; + } + else + { + // Use offset (1) because 0 means "no sorting" + sort_column = 1 + (U32)std::distance(column_names.begin(), it); + } + } LLCoros::instance().launch("LLGroupMgr::groupMembersRequestCoro", [&]() { - groupMembersRequestCoro(cap_url, group_id, page_size, page_start, sort_column); + groupMembersRequestCoro(cap_url, group_id, page_size, page_start, sort_column, sort_descending); }); } -void LLGroupMgr::processCapGroupMembersResponse(const LLSD& response, U32 page_size, U32 page_start, const std::string& sort_column) +void LLGroupMgr::processCapGroupMembersResponse(const LLSD& response, const std::string& url, U32 page_size, U32 page_start, U32 sort_column, bool sort_descending) { LLUUID group_id = response["group_id"].asUUID(); - LL_INFOS("GrpMgr") << "group_id: '" << group_id << "', sort_column: '" << sort_column << "', page_size: " << page_size << ", page_start: " << page_start << LL_ENDL; + LL_INFOS("GrpMgr") << "group_id: '" << group_id << "'" + << ", page_size: " << page_size << ", page_start: " << page_start + << ", sort_column: " << sort_column << ", sort_descending: " << sort_descending << LL_ENDL; // Did we get anything in content? if (!response.size()) @@ -2400,7 +2430,10 @@ void LLGroupMgr::processCapGroupMembersResponse(const LLSD& response, U32 page_s if (page_size && members_loaded >= page_size && member_count > members_before) { - sendCapGroupMembersRequest(group_id, page_size, member_count, sort_column); + LLCoros::instance().launch("LLGroupMgr::groupMembersRequestCoro", [&]() + { + groupMembersRequestCoro(url, group_id, page_size, page_start, sort_column, sort_descending); + }); } // Make the role-member data request diff --git a/indra/newview/llgroupmgr.h b/indra/newview/llgroupmgr.h index 4825dbf83e..67e2dbd3b4 100644 --- a/indra/newview/llgroupmgr.h +++ b/indra/newview/llgroupmgr.h @@ -424,7 +424,7 @@ public: void sendCapGroupMembersRequest(const LLUUID& group_id, - U32 page_size = 0, U32 page_start = 0, const std::string& sort_column = LLStringUtil::null); + U32 page_size = 0, U32 page_start = 0, const std::string& sort_column_name = LLStringUtil::null, bool sort_descending = false); void cancelGroupRoleChanges(const LLUUID& group_id); @@ -447,8 +447,8 @@ public: void clearGroupData(const LLUUID& group_id); private: - void groupMembersRequestCoro(std::string url, LLUUID group_id, U32 page_size, U32 page_start, std::string sort_column); - void processCapGroupMembersResponse(const LLSD& response, U32 page_size, U32 page_start, const std::string& sort_column); + void groupMembersRequestCoro(std::string url, LLUUID group_id, U32 page_size, U32 page_start, U32 sort_column, bool sort_descending); + void processCapGroupMembersResponse(const LLSD& response, const std::string& url, U32 page_size, U32 page_start, U32 sort_column, bool sort_descending); void getGroupBanRequestCoro(std::string url, LLUUID group_id); void postGroupBanRequestCoro(std::string url, LLUUID group_id, U32 action, uuid_vec_t ban_list, bool update); diff --git a/indra/newview/lloutfitgallery.cpp b/indra/newview/lloutfitgallery.cpp index b6ba960a76..527287fd9d 100644 --- a/indra/newview/lloutfitgallery.cpp +++ b/indra/newview/lloutfitgallery.cpp @@ -739,13 +739,16 @@ void LLOutfitGallery::onFilterSubStringChanged(const std::string& new_string, co void LLOutfitGallery::onHighlightBaseOutfit(LLUUID base_id, LLUUID prev_id) { - if (mOutfitMap[base_id]) + auto base_it = mOutfitMap.find(base_id); + if (base_it != mOutfitMap.end()) { - mOutfitMap[base_id]->setOutfitWorn(true); + base_it->second->setOutfitWorn(true); } - if (mOutfitMap[prev_id]) + + auto prev_it = mOutfitMap.find(prev_id); + if (prev_it != mOutfitMap.end()) { - mOutfitMap[prev_id]->setOutfitWorn(false); + prev_it->second->setOutfitWorn(false); } } @@ -859,13 +862,16 @@ void LLOutfitGallery::onChangeOutfitSelection(LLWearableItemsList* list, const L { if (mSelectedOutfitUUID == category_id) return; - if (mOutfitMap[mSelectedOutfitUUID]) + + auto selected_it = mOutfitMap.find(mSelectedOutfitUUID); + if (selected_it != mOutfitMap.end()) { - mOutfitMap[mSelectedOutfitUUID]->setSelected(false); + selected_it->second->setSelected(false); } - if (mOutfitMap[category_id]) + auto category_it = mOutfitMap.find(category_id); + if (category_it != mOutfitMap.end()) { - mOutfitMap[category_id]->setSelected(true); + category_it->second->setSelected(true); } // mSelectedOutfitUUID will be set in LLOutfitListBase::ChangeOutfitSelection } @@ -887,9 +893,10 @@ bool LLOutfitGallery::canWearSelected() bool LLOutfitGallery::hasDefaultImage(const LLUUID& outfit_cat_id) { - if (mOutfitMap[outfit_cat_id]) + auto outfit_it = mOutfitMap.find(outfit_cat_id); + if (outfit_it != mOutfitMap.end()) { - return mOutfitMap[outfit_cat_id]->isDefaultImage(); + return outfit_it->second->isDefaultImage(); } return false; } @@ -937,6 +944,7 @@ LLOutfitGalleryItem::~LLOutfitGalleryItem() bool LLOutfitGalleryItem::postBuild() { + mPreviewIcon = getChild("preview_outfit"); setDefaultImage(); mOutfitNameText = getChild("outfit_name"); @@ -952,10 +960,12 @@ void LLOutfitGalleryItem::draw() LLPanel::draw(); // Draw border - LLUIColor border_color = LLUIColorTable::instance().getColor(mSelected ? "OutfitGalleryItemSelected" : "OutfitGalleryItemUnselected", LLColor4::white); - LLRect border = getChildView("preview_outfit")->getRect(); + static LLUIColor selected_color = LLUIColorTable::instance().getColor("OutfitGalleryItemSelected", LLColor4::white); + static LLUIColor unselected_color = LLUIColorTable::instance().getColor("OutfitGalleryItemUnselected", LLColor4::white); + const LLColor4& border_color = mSelected ? selected_color : unselected_color; + LLRect border = mPreviewIcon->getRect(); border.mRight = border.mRight + 1; - gl_rect_2d(border, border_color.get(), false); + gl_rect_2d(border, border_color, false); // If the floater is focused, don't apply its alpha to the texture (STORM-677). const F32 alpha = getTransparencyType() == TT_ACTIVE ? 1.0f : getCurrentTransparency(); @@ -1111,7 +1121,7 @@ bool LLOutfitGalleryItem::setImageAssetId(LLUUID image_asset_id) { mImageAssetId = image_asset_id; mTexturep = texture; - getChildView("preview_outfit")->setVisible(false); + mPreviewIcon->setVisible(false); mDefaultImage = false; mImageUpdatePending = (texture->getDiscardLevel() == -1); return true; @@ -1128,7 +1138,7 @@ void LLOutfitGalleryItem::setDefaultImage() { mTexturep = NULL; mImageAssetId.setNull(); - getChildView("preview_outfit")->setVisible(true); + mPreviewIcon->setVisible(true); mDefaultImage = true; mImageUpdatePending = false; } diff --git a/indra/newview/lloutfitgallery.h b/indra/newview/lloutfitgallery.h index d921a7fe72..5b2a33d0ca 100644 --- a/indra/newview/lloutfitgallery.h +++ b/indra/newview/lloutfitgallery.h @@ -261,6 +261,7 @@ private: LLTextBox* mOutfitNameText; LLTextBox* mOutfitWornText; LLPanel* mTextBgPanel; + LLIconCtrl* mPreviewIcon = nullptr; bool mSelected; bool mWorn; bool mDefaultImage; diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp index 1014bc951c..a7725d8899 100644 --- a/indra/newview/llpaneleditwearable.cpp +++ b/indra/newview/llpaneleditwearable.cpp @@ -48,6 +48,7 @@ #include "llscrollingpanelparam.h" #include "llradiogroup.h" #include "llnotificationsutil.h" +#include "lliconctrl.h" #include "llcolorswatch.h" #include "lltexturectrl.h" @@ -312,12 +313,8 @@ LLEditWearableDictionary::Subparts::Subparts() addEntry(SUBPART_PHYSICS_BREASTS_UPDOWN, new SubpartEntry(SUBPART_PHYSICS_BREASTS_UPDOWN, "mTorso", "physics_breasts_updown", "physics_breasts_updown_param_list", "physics_breasts_updown_tab", LLVector3d(0.f, 0.f, 0.3f), LLVector3d(0.f, 0.f, 0.f),SEX_FEMALE)); addEntry(SUBPART_PHYSICS_BREASTS_INOUT, new SubpartEntry(SUBPART_PHYSICS_BREASTS_INOUT, "mTorso", "physics_breasts_inout", "physics_breasts_inout_param_list", "physics_breasts_inout_tab", LLVector3d(0.f, 0.f, 0.3f), LLVector3d(0.f, 0.f, 0.f),SEX_FEMALE)); addEntry(SUBPART_PHYSICS_BREASTS_LEFTRIGHT, new SubpartEntry(SUBPART_PHYSICS_BREASTS_LEFTRIGHT, "mTorso", "physics_breasts_leftright", "physics_breasts_leftright_param_list", "physics_breasts_leftright_tab", LLVector3d(0.f, 0.f, 0.3f), LLVector3d(0.f, 0.f, 0.f),SEX_FEMALE)); - // Fix XUI warning - //addEntry(SUBPART_PHYSICS_BELLY_UPDOWN, new SubpartEntry(SUBPART_PHYSICS_BELLY_UPDOWN, "mTorso", "physics_belly_updown", "physics_belly_updown_param_list", "physics_belly_updown_tab", LLVector3d(0.f, 0.f, 0.3f), LLVector3d(0.f, 0.f, 0.f),SEX_BOTH)); - //addEntry(SUBPART_PHYSICS_BUTT_UPDOWN, new SubpartEntry(SUBPART_PHYSICS_BUTT_UPDOWN, "mTorso", "physics_butt_updown", "physics_butt_updown_param_list", "physics_butt_updown_tab", LLVector3d(0.f, 0.f, 0.3f), LLVector3d(0.f, 0.f, 0.f),SEX_BOTH)); addEntry(SUBPART_PHYSICS_BELLY_UPDOWN, new SubpartEntry(SUBPART_PHYSICS_BELLY_UPDOWN, "mTorso", "physics_belly_updown", "physics_belly_updown_param_list", "physics_belly_tab", LLVector3d(0.f, 0.f, 0.3f), LLVector3d(0.f, 0.f, 0.f),SEX_BOTH)); addEntry(SUBPART_PHYSICS_BUTT_UPDOWN, new SubpartEntry(SUBPART_PHYSICS_BUTT_UPDOWN, "mTorso", "physics_butt_updown", "physics_butt_updown_param_list", "physics_butt_tab", LLVector3d(0.f, 0.f, 0.3f), LLVector3d(0.f, 0.f, 0.f),SEX_BOTH)); - // addEntry(SUBPART_PHYSICS_BUTT_LEFTRIGHT, new SubpartEntry(SUBPART_PHYSICS_BUTT_LEFTRIGHT, "mTorso", "physics_butt_leftright", "physics_butt_leftright_param_list", "physics_butt_leftright_tab", LLVector3d(0.f, 0.f, 0.f), LLVector3d(0.f, 0.f, 0.f),SEX_BOTH)); addEntry(SUBPART_PHYSICS_ADVANCED, new SubpartEntry(SUBPART_PHYSICS_ADVANCED, "mTorso", "physics_advanced", "physics_advanced_param_list", "physics_advanced_tab", LLVector3d(0.f, 0.f, 0.f), LLVector3d(0.f, 0.f, 0.f),SEX_BOTH)); } @@ -740,8 +737,14 @@ bool LLPanelEditWearable::postBuild() mPanelTitle = getChild("edit_wearable_title"); mDescTitle = getChild("description_text"); - getChild("sex_radio")->setCommitCallback(boost::bind(&LLPanelEditWearable::onCommitSexChange, this)); - getChild("save_as_button")->setCommitCallback(boost::bind(&LLPanelEditWearable::onSaveAsButtonClicked, this)); + mSexRadio = getChild("sex_radio"); + mSexRadio->setCommitCallback(boost::bind(&LLPanelEditWearable::onCommitSexChange, this)); + + mMaleIcon = getChild("male_icon"); + mFemaleIcon = getChild("female_icon"); + + mBtnSaveAs = getChild("save_as_button"); + mBtnSaveAs->setCommitCallback(boost::bind(&LLPanelEditWearable::onSaveAsButtonClicked, this)); // The following panels will be shown/hidden based on what wearable we're editing // body parts @@ -828,9 +831,21 @@ bool LLPanelEditWearable::postBuild() continue; } + mAccordionTabs.emplace(accordion_tab, tab); + // initialize callback to ensure camera view changes appropriately. tab->setDropDownStateChangedCallback(boost::bind(&LLPanelEditWearable::onTabExpandedCollapsed,this,_2,index)); + const std::string& scrolling_panel = subpart_entry->mParamList; + if (!scrolling_panel.empty()) + { + LLScrollingPanelList* panel_list = tab->findChild(scrolling_panel); + if (panel_list) + { + mParamPanels.emplace(scrolling_panel, panel_list); + } + } + // Appearance panel not updating camera position; Some skins use tabs - in this case // set a callback on the tab container when the tab is changed to switch the camera position if (!tab_container_cb_set) @@ -1267,19 +1282,21 @@ void LLPanelEditWearable::showWearable(LLViewerWearable* wearable, bool show, bo continue; } - LLScrollingPanelList *panel_list = findChild(scrolling_panel); - LLAccordionCtrlTab *tab = findChild(accordion_tab); - if (!panel_list) + auto accord_it = mAccordionTabs.find(accordion_tab); + if (accord_it == mAccordionTabs.end()) { - LL_WARNS() << "could not get scrolling panel list: " << scrolling_panel << LL_ENDL; - continue; + LL_WARNS() << "could not get llaccordionctrltab from UI with name: " << accordion_tab << LL_ENDL; + continue; } + LLAccordionCtrlTab* tab = accord_it->second; - if (!tab) + auto panel_it = mParamPanels.find(scrolling_panel); + if (panel_it == mParamPanels.end()) { - LL_WARNS() << "could not get llaccordionctrltab from UI with name: " << accordion_tab << LL_ENDL; - continue; + LL_WARNS() << "could not get scrolling panel list: " << scrolling_panel << LL_ENDL; + continue; } + LLScrollingPanelList *panel_list = panel_it->second; // Don't show female subparts if you're not female, etc. if (!(gAgentAvatarp->getSex() & subpart_entry->mSex)) @@ -1293,7 +1310,7 @@ void LLPanelEditWearable::showWearable(LLViewerWearable* wearable, bool show, bo } // what edit group do we want to extract params for? - const std::string edit_group = subpart_entry->mEditGroup; + const std::string& edit_group = subpart_entry->mEditGroup; // storage for ordered list of visual params value_map_t sorted_params; @@ -1448,9 +1465,9 @@ void LLPanelEditWearable::toggleTypeSpecificControls(LLWearableType::EType type) // Toggle controls specific to shape editing panel. { bool is_shape = (type == LLWearableType::WT_SHAPE); - getChildView("sex_radio")->setVisible( is_shape); - getChildView("female_icon")->setVisible( is_shape); - getChildView("male_icon")->setVisible( is_shape); + mSexRadio->setVisible(is_shape); + mFemaleIcon->setVisible(is_shape); + mMaleIcon->setVisible(is_shape); } } @@ -1515,15 +1532,15 @@ void LLPanelEditWearable::updateScrollingPanelUI() ESubpart subpart_e = wearable_entry->mSubparts[index]; const LLEditWearableDictionary::SubpartEntry *subpart_entry = LLEditWearableDictionary::getInstance()->getSubpart(subpart_e); - const std::string scrolling_panel = subpart_entry->mParamList; + const std::string& scrolling_panel = subpart_entry->mParamList; - LLScrollingPanelList *panel_list = getChild(scrolling_panel); - - if (!panel_list) + auto panel_it = mParamPanels.find(scrolling_panel); + if (panel_it == mParamPanels.end()) { - LL_WARNS() << "could not get scrolling panel list: " << scrolling_panel << LL_ENDL; - continue; + LL_WARNS() << "could not get scrolling panel list: " << scrolling_panel << LL_ENDL; + continue; } + LLScrollingPanelList* panel_list = panel_it->second; panel_list->updatePanels(true); } @@ -1663,7 +1680,7 @@ void LLPanelEditWearable::updateVerbs() bool is_dirty = isDirty(); mBtnRevert->setEnabled(is_dirty); - getChildView("save_as_button")->setEnabled(is_dirty && can_copy); + mBtnSaveAs->setEnabled(is_dirty && can_copy); // [FS:CR] FIRE-10986 - A little redundant since you shouldn't be able to get here if the wearable is // no modify, but what the hell, check anyways. @@ -1705,7 +1722,7 @@ void LLPanelEditWearable::configureAlphaCheckbox(LLAvatarAppearanceDefines::ETex LLCheckBoxCtrl* checkbox = mPanelAlpha->getChild(name); checkbox->setCommitCallback(boost::bind(&LLPanelEditWearable::onInvisibilityCommit, this, checkbox, te)); - mAlphaCheckbox2Index[name] = te; + mAlphaCheckbox2Index.push_back(std::make_pair(checkbox,te)); } void LLPanelEditWearable::onInvisibilityCommit(LLCheckBoxCtrl* checkbox_ctrl, LLAvatarAppearanceDefines::ETextureIndex te) @@ -1766,11 +1783,10 @@ void LLPanelEditWearable::onInvisibilityCommit(LLCheckBoxCtrl* checkbox_ctrl, LL void LLPanelEditWearable::updateAlphaCheckboxes() { - for (string_texture_index_map_t::iterator iter = mAlphaCheckbox2Index.begin(); - iter != mAlphaCheckbox2Index.end(); ++iter ) + for (const auto& check_pair : mAlphaCheckbox2Index) { - LLAvatarAppearanceDefines::ETextureIndex te = (LLAvatarAppearanceDefines::ETextureIndex)iter->second; - LLCheckBoxCtrl* ctrl = mPanelAlpha->getChild(iter->first); + LLAvatarAppearanceDefines::ETextureIndex te = (LLAvatarAppearanceDefines::ETextureIndex)check_pair.second; + LLCheckBoxCtrl* ctrl = check_pair.first; if (ctrl) { ctrl->set(!gAgentAvatarp->isTextureVisible(te, mWearablePtr)); diff --git a/indra/newview/llpaneleditwearable.h b/indra/newview/llpaneleditwearable.h index d18541283c..c5c511cc9d 100644 --- a/indra/newview/llpaneleditwearable.h +++ b/indra/newview/llpaneleditwearable.h @@ -45,6 +45,8 @@ class LLViewerJointMesh; class LLAccordionCtrlTab; class LLJoint; class LLLineEditor; +class LLRadioGroup; +class LLIconCtrl; class LLPanelEditWearable : public LLPanel, public LLWearable::LLWearableObserver { @@ -133,6 +135,7 @@ private: LLViewerInventoryItem* mWearableItem; // these are constant no matter what wearable we're editing + LLButton* mBtnSaveAs; LLButton *mBtnRevert; LLButton *mBtnBack; std::string mBackBtnLabel; @@ -141,6 +144,9 @@ private: LLTextBox *mDescTitle; LLTextBox *mTxtAvatarHeight; + LLRadioGroup* mSexRadio = nullptr; + LLIconCtrl* mMaleIcon = nullptr; + LLIconCtrl* mFemaleIcon = nullptr; // localized and parameterized strings that used to build avatar_height_label std::string mMeters; @@ -180,8 +186,11 @@ private: LLPanel *mPanelUniversal; LLPanel *mPanelPhysics; - typedef std::map string_texture_index_map_t; - string_texture_index_map_t mAlphaCheckbox2Index; + std::unordered_map mAccordionTabs; + std::unordered_map mParamPanels; + + typedef std::vector> checkbox_texture_index_vec_t; + checkbox_texture_index_vec_t mAlphaCheckbox2Index; typedef std::map s32_uuid_map_t; s32_uuid_map_t mPreviousAlphaTexture; diff --git a/indra/newview/llpanelenvironment.h b/indra/newview/llpanelenvironment.h index 8942e20119..c9b95cc348 100644 --- a/indra/newview/llpanelenvironment.h +++ b/indra/newview/llpanelenvironment.h @@ -40,6 +40,7 @@ class LLViewerRegion; class LLIconCtrl; +class LLSettingsDropTarget; class LLPanelEnvironmentInfo : public LLPanel { diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp index 7564784d63..37f5a5167d 100644 --- a/indra/newview/llpanelface.cpp +++ b/indra/newview/llpanelface.cpp @@ -203,13 +203,11 @@ LLRender::eTexIndex LLPanelFace::getTextureChannelToEdit() U32 matmedia_selection = mComboMatMedia->getCurrentIndex(); if (matmedia_selection == MATMEDIA_MATERIAL) { - LLRadioGroup* radio_mat_type = getChild("radio_material_type"); - channel_to_edit = (LLRender::eTexIndex)radio_mat_type->getSelectedIndex(); + channel_to_edit = (LLRender::eTexIndex)mRadioMaterialType->getSelectedIndex(); } if (matmedia_selection == MATMEDIA_PBR) { - LLRadioGroup* radio_mat_type = getChild("radio_pbr_type"); - channel_to_edit = (LLRender::eTexIndex)radio_mat_type->getSelectedIndex(); + channel_to_edit = (LLRender::eTexIndex)mRadioPbrType->getSelectedIndex(); } } @@ -222,8 +220,7 @@ LLRender::eTexIndex LLPanelFace::getTextureDropChannel() { if (mComboMatMedia && mComboMatMedia->getCurrentIndex() == MATMEDIA_MATERIAL) { - LLRadioGroup* radio_mat_type = getChild("radio_material_type"); - return LLRender::eTexIndex(radio_mat_type->getSelectedIndex()); + return LLRender::eTexIndex(mRadioMaterialType->getSelectedIndex()); } return LLRender::eTexIndex(MATTYPE_DIFFUSE); @@ -233,8 +230,7 @@ LLGLTFMaterial::TextureInfo LLPanelFace::getPBRDropChannel() { if (mComboMatMedia && mComboMatMedia->getCurrentIndex() == MATMEDIA_PBR) { - LLRadioGroup* radio_pbr_type = getChild("radio_pbr_type"); - return texture_info_from_pbrtype(radio_pbr_type->getSelectedIndex()); + return texture_info_from_pbrtype(mRadioPbrType->getSelectedIndex()); } return texture_info_from_pbrtype(PBRTYPE_BASE_COLOR); @@ -242,8 +238,8 @@ LLGLTFMaterial::TextureInfo LLPanelFace::getPBRDropChannel() // Things the UI provides... // -LLUUID LLPanelFace::getCurrentNormalMap() { return mBumpyTextureCtrl->getImageAssetID(); } -LLUUID LLPanelFace::getCurrentSpecularMap() { return mShinyTextureCtrl->getImageAssetID(); } +LLUUID LLPanelFace::getCurrentNormalMap() { return mBumpyTextureCtrl->getImageAssetID(); } +LLUUID LLPanelFace::getCurrentSpecularMap() { return mShinyTextureCtrl->getImageAssetID(); } U32 LLPanelFace::getCurrentShininess() { return getChild("combobox shininess")->getCurrentIndex(); } U32 LLPanelFace::getCurrentBumpiness() { return getChild("combobox bumpiness")->getCurrentIndex(); } U8 LLPanelFace::getCurrentDiffuseAlphaMode() { return (U8)getChild("combobox alphamode")->getCurrentIndex(); } @@ -404,42 +400,26 @@ bool LLPanelFace::postBuild() childSetAction("edit_selected_pbr", &LLPanelFace::onClickBtnEditPBR, this); childSetAction("save_selected_pbr", &LLPanelFace::onClickBtnSavePBR, this); - // Moved to the header so other functions can use them too. - //LLTextureCtrl* mTextureCtrl; - //LLTextureCtrl* mShinyTextureCtrl; - //LLTextureCtrl* mBumpyTextureCtrl; - //LLColorSwatchCtrl* mColorSwatch; - //LLColorSwatchCtrl* mShinyColorSwatch; - - //LLComboBox* mComboTexGen; - - //LLCheckBoxCtrl *mCheckFullbright; - - //LLTextBox* mLabelColorTransp; - //LLSpinCtrl* mCtrlColorTransp; // transparency = 1 - alpha - - //LLSpinCtrl* mCtrlGlow; - setMouseOpaque(false); - LLTextureCtrl* pbr_ctrl = findChild("pbr_control"); - if (pbr_ctrl) + mPBRTextureCtrl = getChild("pbr_control"); + if (mPBRTextureCtrl) { - pbr_ctrl->setDefaultImageAssetID(LLUUID::null); - pbr_ctrl->setBlankImageAssetID(BLANK_MATERIAL_ASSET_ID); - pbr_ctrl->setCommitCallback(boost::bind(&LLPanelFace::onCommitPbr, this, _2)); - pbr_ctrl->setOnCancelCallback(boost::bind(&LLPanelFace::onCancelPbr, this, _2)); - pbr_ctrl->setOnSelectCallback(boost::bind(&LLPanelFace::onSelectPbr, this, _2)); - pbr_ctrl->setDragCallback(boost::bind(&LLPanelFace::onDragPbr, this, _2)); - pbr_ctrl->setOnTextureSelectedCallback(boost::bind(&LLPanelFace::onPbrSelectionChanged, this, _1)); - pbr_ctrl->setOnCloseCallback(boost::bind(&LLPanelFace::onCloseTexturePicker, this, _2)); + mPBRTextureCtrl->setDefaultImageAssetID(LLUUID::null); + mPBRTextureCtrl->setBlankImageAssetID(BLANK_MATERIAL_ASSET_ID); + mPBRTextureCtrl->setCommitCallback(boost::bind(&LLPanelFace::onCommitPbr, this, _2)); + mPBRTextureCtrl->setOnCancelCallback(boost::bind(&LLPanelFace::onCancelPbr, this, _2)); + mPBRTextureCtrl->setOnSelectCallback(boost::bind(&LLPanelFace::onSelectPbr, this, _2)); + mPBRTextureCtrl->setDragCallback(boost::bind(&LLPanelFace::onDragPbr, this, _2)); + mPBRTextureCtrl->setOnTextureSelectedCallback(boost::bind(&LLPanelFace::onPbrSelectionChanged, this, _1)); + mPBRTextureCtrl->setOnCloseCallback(boost::bind(&LLPanelFace::onCloseTexturePicker, this, _2)); - pbr_ctrl->setFollowsTop(); - pbr_ctrl->setFollowsLeft(); - pbr_ctrl->setImmediateFilterPermMask(PERM_NONE); - pbr_ctrl->setDnDFilterPermMask(PERM_COPY | PERM_TRANSFER); - pbr_ctrl->setBakeTextureEnabled(false); - pbr_ctrl->setInventoryPickType(PICK_MATERIAL); + mPBRTextureCtrl->setFollowsTop(); + mPBRTextureCtrl->setFollowsLeft(); + mPBRTextureCtrl->setImmediateFilterPermMask(PERM_NONE); + mPBRTextureCtrl->setDnDFilterPermMask(PERM_COPY | PERM_TRANSFER); + mPBRTextureCtrl->setBakeTextureEnabled(false); + mPBRTextureCtrl->setInventoryPickType(PICK_MATERIAL); } mTextureCtrl = getChild("texture control"); @@ -552,11 +532,11 @@ bool LLPanelFace::postBuild() mComboMatMedia->selectNthItem(MATMEDIA_MATERIAL); } - mRadioMatType = findChild("radio_material_type"); - if(mRadioMatType) + mRadioMaterialType = findChild("radio_material_type"); + if(mRadioMaterialType) { - mRadioMatType->setCommitCallback(LLPanelFace::onCommitMaterialType, this); - mRadioMatType->selectNthItem(MATTYPE_DIFFUSE); + mRadioMaterialType->setCommitCallback(LLPanelFace::onCommitMaterialType, this); + mRadioMaterialType->selectNthItem(MATTYPE_DIFFUSE); } mRadioPbrType = findChild("radio_pbr_type"); @@ -650,7 +630,6 @@ void LLPanelFace::draw() void LLPanelFace::sendTexture() { - //LLTextureCtrl* mTextureCtrl = getChild("texture control"); if(!mTextureCtrl) return; if( !mTextureCtrl->getTentative() ) { @@ -671,13 +650,10 @@ void LLPanelFace::sendTexture() void LLPanelFace::sendBump(U32 bumpiness) { - //LLTextureCtrl* bumpytexture_ctrl = getChild("bumpytexture control"); if (!mBumpyTextureCtrl) return; if (bumpiness < BUMPY_TEXTURE) { LL_DEBUGS("Materials") << "clearing bumptexture control" << LL_ENDL; - //bumpytexture_ctrl->clear(); - //bumpytexture_ctrl->setImageAssetID(LLUUID()); mBumpyTextureCtrl->clear(); mBumpyTextureCtrl->setImageAssetID(LLUUID()); } @@ -697,13 +673,11 @@ void LLPanelFace::sendBump(U32 bumpiness) // LLSelectedTEMaterial::setNormalID(this, current_normal_map); - //LLSelectMgr::getInstance()->selectionSetBumpmap(bump, bumpytexture_ctrl->getImageItemID()); - LLSelectMgr::getInstance()->selectionSetBumpmap(bump, mBumpyTextureCtrl->getImageItemID()); + LLSelectMgr::getInstance()->selectionSetBumpmap( bump, mBumpyTextureCtrl->getImageItemID() ); } void LLPanelFace::sendTexGen() { - //LLComboBox* mComboTexGen = getChild("combobox texgen"); if(!mComboTexGen)return; U8 tex_gen = (U8) mComboTexGen->getCurrentIndex() << TEM_TEX_GEN_SHIFT; LLSelectMgr::getInstance()->selectionSetTexGen( tex_gen ); @@ -711,13 +685,10 @@ void LLPanelFace::sendTexGen() void LLPanelFace::sendShiny(U32 shininess) { - //LLTextureCtrl* texture_ctrl = getChild("shinytexture control"); if (!mShinyTextureCtrl) return; if (shininess < SHINY_TEXTURE) { - //texture_ctrl->clear(); - //texture_ctrl->setImageAssetID(LLUUID()); mShinyTextureCtrl->clear(); mShinyTextureCtrl->setImageAssetID(LLUUID()); } @@ -730,8 +701,7 @@ void LLPanelFace::sendShiny(U32 shininess) LLSelectedTEMaterial::setSpecularID(this, specmap); - //LLSelectMgr::getInstance()->selectionSetShiny(shiny, texture_ctrl->getImageItemID()); - LLSelectMgr::getInstance()->selectionSetShiny(shiny, mShinyTextureCtrl->getImageItemID()); + LLSelectMgr::getInstance()->selectionSetShiny( shiny, mShinyTextureCtrl->getImageItemID() ); updateShinyControls(!specmap.isNull(), true); @@ -739,16 +709,14 @@ void LLPanelFace::sendShiny(U32 shininess) void LLPanelFace::sendFullbright() { - //LLCheckBoxCtrl* mCheckFullbright = getChild("checkbox fullbright"); - if (!mCheckFullbright) return; + if(!mCheckFullbright)return; U8 fullbright = mCheckFullbright->get() ? TEM_FULLBRIGHT_MASK : 0; LLSelectMgr::getInstance()->selectionSetFullbright( fullbright ); } void LLPanelFace::sendColor() { - //LLColorSwatchCtrl* mColorSwatch = getChild("colorswatch"); - if (!mColorSwatch) return; + if(!mColorSwatch)return; LLColor4 color = mColorSwatch->get(); LLSelectMgr::getInstance()->selectionSetColorOnly( color ); @@ -756,8 +724,7 @@ void LLPanelFace::sendColor() void LLPanelFace::sendAlpha() { - //LLSpinCtrl* mCtrlColorTransp = getChild("ColorTrans"); - if (!mCtrlColorTransp) return; + if(!mCtrlColorTransp)return; F32 alpha = (100.f - mCtrlColorTransp->get()) / 100.f; LLSelectMgr::getInstance()->selectionSetAlphaOnly( alpha ); @@ -766,9 +733,6 @@ void LLPanelFace::sendAlpha() void LLPanelFace::sendGlow() { - //LLSpinCtrl* mCtrlGlow = getChild("glow"); - //llassert(mCtrlGlow); - if (!mCtrlGlow) return; if (mCtrlGlow) { F32 glow = mCtrlGlow->get(); @@ -1118,14 +1082,13 @@ void LLPanelFace::sendTextureInfo() LLSelectMgr::getInstance()->getSelection()->applyToObjects(&sendfunc); } -void LLPanelFace::alignTestureLayer() +void LLPanelFace::alignTextureLayer() { LLFace* last_face = NULL; bool identical_face = false; LLSelectedTE::getFace(last_face, identical_face); - LLRadioGroup * radio_mat_type = getChild("radio_material_type"); - LLPanelFaceSetAlignedConcreteTEFunctor setfunc(this, last_face, static_cast(radio_mat_type->getSelectedIndex())); + LLPanelFaceSetAlignedConcreteTEFunctor setfunc(this, last_face, static_cast(mRadioMaterialType->getSelectedIndex())); LLSelectMgr::getInstance()->getSelection()->applyToTEs(&setfunc); } @@ -1180,10 +1143,6 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/) bool identical_norm = false; bool identical_spec = false; - //LLTextureCtrl *texture_ctrl = getChild("texture control"); - //LLTextureCtrl *shinytexture_ctrl = getChild("shinytexture control"); - //LLTextureCtrl *bumpytexture_ctrl = getChild("bumpytexture control"); - LLUUID id; LLUUID normmap_id; LLUUID specmap_id; @@ -1247,14 +1206,12 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/) } mComboMatMedia->setEnabled(editable); - //LLRadioGroup* radio_mat_type = getChild("radio_material_type"); - if (mRadioMatType->getSelectedIndex() < MATTYPE_DIFFUSE) + if (mRadioMaterialType->getSelectedIndex() < MATTYPE_DIFFUSE) { - mRadioMatType->selectNthItem(MATTYPE_DIFFUSE); + mRadioMaterialType->selectNthItem(MATTYPE_DIFFUSE); } - mRadioMatType->setEnabled(editable); + mRadioMaterialType->setEnabled(editable); - //LLRadioGroup* radio_pbr_type = getChild("radio_pbr_type"); if (mRadioPbrType->getSelectedIndex() < PBRTYPE_RENDER_MATERIAL_ID) { mRadioPbrType->selectNthItem(PBRTYPE_RENDER_MATERIAL_ID); @@ -1272,7 +1229,6 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/) { getChildView("color label")->setEnabled(editable); } - //LLColorSwatchCtrl* color_swatch = findChild("colorswatch"); LLColor4 color = LLColor4::white; bool identical_color = false; @@ -1286,16 +1242,16 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/) mColorSwatch->set(color, force_set_values || (prev_color != color) || !editable); mColorSwatch->setValid(editable && !has_pbr_material); - mColorSwatch->setEnabled(editable && !has_pbr_material); + mColorSwatch->setEnabled( editable && !has_pbr_material); mColorSwatch->setCanApplyImmediately( editable && !has_pbr_material); } // Color transparency - getChildView("color trans")->setEnabled(editable); + mLabelColorTransp->setEnabled(editable); F32 transparency = (1.f - color.mV[VALPHA]) * 100.f; - getChild("ColorTrans")->setValue(editable ? transparency : 0); - getChildView("ColorTrans")->setEnabled(editable && has_material); + mCtrlColorTransp->setValue(editable ? transparency : 0); + mCtrlColorTransp->setEnabled(editable && has_material); U8 shiny = 0; bool identical_shiny = false; @@ -1325,10 +1281,8 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/) getChild("combobox shininess")->setTentative(!identical_spec); getChild("glossiness")->setTentative(!identical_spec); getChild("environment")->setTentative(!identical_spec); - getChild("shinycolorswatch")->setTentative(!identical_spec); + mShinyColorSwatch->setTentative(!identical_spec); - //LLColorSwatchCtrl* mShinyColorSwatch = getChild("shinycolorswatch"); - if (mShinyColorSwatch) { mShinyColorSwatch->setValid(editable); mShinyColorSwatch->setEnabled( editable ); @@ -1490,7 +1444,7 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/) if (mShinyTextureCtrl) { mShinyTextureCtrl->setTentative( !identical_spec ); - mShinyTextureCtrl->setEnabled( editable && !has_pbr_material ); + mShinyTextureCtrl->setEnabled( editable && !has_pbr_material); mShinyTextureCtrl->setImageAssetID( specmap_id ); if (attachment) @@ -1506,7 +1460,7 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/) if (mBumpyTextureCtrl) { mBumpyTextureCtrl->setTentative( !identical_norm ); - mBumpyTextureCtrl->setEnabled( editable && !has_pbr_material ); + mBumpyTextureCtrl->setEnabled( editable && !has_pbr_material); mBumpyTextureCtrl->setImageAssetID( normmap_id ); if (attachment) @@ -1764,27 +1718,18 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/) F32 glow = 0.f; bool identical_glow = false; LLSelectedTE::getGlow(glow,identical_glow); - LLUICtrl* glow_ctrl = getChild("glow"); - glow_ctrl->setValue(glow); - glow_ctrl->setTentative(!identical_glow); - glow_ctrl->setEnabled(editable); + mCtrlGlow->setValue(glow); + mCtrlGlow->setTentative(!identical_glow); + mCtrlGlow->setEnabled(editable); getChildView("glow label")->setEnabled(editable); } { - LLCtrlSelectionInterface* combobox_texgen = childGetSelectionInterface("combobox texgen"); - if (combobox_texgen) - { - // Maps from enum to combobox entry index - combobox_texgen->selectNthItem(((S32)selected_texgen) >> 1); - } - else - { - LL_WARNS() << "failed childGetSelectionInterface for 'combobox texgen'" << LL_ENDL; - } + // Maps from enum to combobox entry index + mComboTexGen->selectNthItem(((S32)selected_texgen) >> 1); - getChildView("combobox texgen")->setEnabled(editable); - getChild("combobox texgen")->setTentative(!identical); + mComboTexGen->setEnabled(editable); + mComboTexGen->setTentative(!identical); getChildView("tex gen")->setEnabled(editable); } @@ -1794,10 +1739,9 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/) LLSelectedTE::getFullbright(fullbright_flag,identical_fullbright); - LLUICtrl* check_fullbright = getChild("checkbox fullbright"); - check_fullbright->setValue((S32)(fullbright_flag != 0)); - check_fullbright->setEnabled(editable && !has_pbr_material); - check_fullbright->setTentative(!identical_fullbright); + mCheckFullbright->setValue((S32)(fullbright_flag != 0)); + mCheckFullbright->setEnabled(editable && !has_pbr_material); + mCheckFullbright->setTentative(!identical_fullbright); mComboMatMedia->setEnabledByValue("Materials", !has_pbr_material); } @@ -1815,8 +1759,6 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/) LLSelectedTEMaterial::getMaxNormalRepeats(repeats_norm, identical_norm_repeats); LLSelectedTEMaterial::getMaxSpecularRepeats(repeats_spec, identical_spec_repeats); - LLComboBox* mComboTexGen = getChild("combobox texgen"); - if (mComboTexGen) { S32 index = mComboTexGen ? mComboTexGen->getCurrentIndex() : 0; bool enabled = editable && (index != 1); @@ -1827,7 +1769,7 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/) U32 material_type = MATTYPE_DIFFUSE; if (material_selection == MATMEDIA_MATERIAL) { - material_type = mRadioMatType->getSelectedIndex(); + material_type = mRadioMaterialType->getSelectedIndex(); } else if (material_selection == MATMEDIA_PBR) { @@ -1935,7 +1877,6 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/) // Shiny (specular) F32 offset_x, offset_y, repeat_x, repeat_y, rot; - //LLTextureCtrl* texture_ctrl = getChild("shinytexture control"); mShinyTextureCtrl->setImageAssetID(material->getSpecularID()); if (!material->getSpecularID().isNull() && (shiny == SHINY_TEXTURE)) @@ -1966,12 +1907,11 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/) // if (!material->getSpecularID().isNull()) { - LLColorSwatchCtrl* shiny_swatch = getChild("shinycolorswatch"); LLColor4 new_color = material->getSpecularLightColor(); - LLColor4 old_color = shiny_swatch->get(); + LLColor4 old_color = mShinyColorSwatch->get(); - shiny_swatch->setOriginal(new_color); - shiny_swatch->set(new_color, force_set_values || old_color != new_color || !editable); + mShinyColorSwatch->setOriginal(new_color); + mShinyColorSwatch->set(new_color, force_set_values || old_color != new_color || !editable); } // Bumpy (normal) @@ -2014,8 +1954,8 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/) calcp->setVar(LLCalc::TEX_U_OFFSET, getCurrentTextureOffsetU()); calcp->setVar(LLCalc::TEX_V_OFFSET, getCurrentTextureOffsetV()); calcp->setVar(LLCalc::TEX_ROTATION, getCurrentTextureRot()); - calcp->setVar(LLCalc::TEX_TRANSPARENCY, (F32)childGetValue("ColorTrans").asReal()); - calcp->setVar(LLCalc::TEX_GLOW, (F32)childGetValue("glow").asReal()); + calcp->setVar(LLCalc::TEX_TRANSPARENCY, (F32)mCtrlColorTransp->getValue().asReal()); + calcp->setVar(LLCalc::TEX_GLOW, (F32)mCtrlGlow->getValue().asReal()); // Find all faces with same texture getChild("btn_select_same_diff")->setEnabled(LLSelectMgr::getInstance()->getTEMode() && mTextureCtrl->getEnabled()); @@ -2029,32 +1969,31 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/) clearCtrls(); // Disable non-UICtrls - LLTextureCtrl* pbr_ctrl = findChild("pbr_control"); - if (pbr_ctrl) + if (mPBRTextureCtrl) { - pbr_ctrl->setImageAssetID(LLUUID::null); - pbr_ctrl->setEnabled(false); + mPBRTextureCtrl->setImageAssetID(LLUUID::null); + mPBRTextureCtrl->setEnabled(false); } - ///LLTextureCtrl* texture_ctrl = getChild("texture control"); + if (mTextureCtrl) { mTextureCtrl->setImageAssetID( LLUUID::null ); mTextureCtrl->setEnabled( false ); // this is a LLUICtrl, but we don't want it to have keyboard focus so we add it as a child, not a ctrl. // mTextureCtrl->setValid(false); } - //LLColorSwatchCtrl* mColorSwatch = getChild("colorswatch"); + if (mColorSwatch) { mColorSwatch->setEnabled( false ); mColorSwatch->setFallbackImage(LLUI::getUIImage("locked_image.j2c") ); mColorSwatch->setValid(false); } - //LLRadioGroup* radio_mat_type = getChild("radio_material_type"); - if (mRadioMatType) + + if (mRadioMaterialType) { - mRadioMatType->setSelectedIndex(0); + mRadioMaterialType->setSelectedIndex(0); } - getChildView("color trans")->setEnabled(false); + mLabelColorTransp->setEnabled(false); mCtrlRpt->setEnabled(false); getChildView("tex gen")->setEnabled(false); getChildView("label shininess")->setEnabled(false); @@ -2171,23 +2110,22 @@ void LLPanelFace::updateUIGLTF(LLViewerObject* objectp, bool& has_pbr_material, const bool saveable = LLMaterialEditor::canSaveObjectsMaterial(); // pbr material - LLTextureCtrl* pbr_ctrl = findChild("pbr_control"); LLUUID pbr_id; - if (pbr_ctrl) + if (mPBRTextureCtrl) { LLSelectedTE::getPbrMaterialId(pbr_id, identical_pbr, has_pbr_material, has_faces_without_pbr); - pbr_ctrl->setTentative(!identical_pbr); - pbr_ctrl->setEnabled(settable); - pbr_ctrl->setImageAssetID(pbr_id); + mPBRTextureCtrl->setTentative(!identical_pbr); + mPBRTextureCtrl->setEnabled(settable); + mPBRTextureCtrl->setImageAssetID(pbr_id); if (objectp->isAttachment()) { - pbr_ctrl->setFilterPermissionMasks(PERM_COPY | PERM_TRANSFER | PERM_MODIFY); + mPBRTextureCtrl->setFilterPermissionMasks(PERM_COPY | PERM_TRANSFER | PERM_MODIFY); } else { - pbr_ctrl->setImmediateFilterPermMask(PERM_NONE); + mPBRTextureCtrl->setImmediateFilterPermMask(PERM_NONE); } } @@ -2246,13 +2184,12 @@ void LLPanelFace::updateVisibilityGLTF(LLViewerObject* objectp /*= nullptr */) const bool show_pbr = mComboMatMedia->getCurrentIndex() == MATMEDIA_PBR && mComboMatMedia->getEnabled(); const bool inventory_pending = objectp && objectp->isInventoryPending(); - LLRadioGroup* radio_pbr_type = findChild("radio_pbr_type"); - radio_pbr_type->setVisible(show_pbr); + mRadioPbrType->setVisible(show_pbr); - const U32 pbr_type = radio_pbr_type->getSelectedIndex(); + const U32 pbr_type = mRadioPbrType->getSelectedIndex(); const bool show_pbr_render_material_id = show_pbr && (pbr_type == PBRTYPE_RENDER_MATERIAL_ID); - getChildView("pbr_control")->setVisible(show_pbr_render_material_id); + mPBRTextureCtrl->setVisible(show_pbr_render_material_id); getChildView("pbr_from_inventory")->setVisible(show_pbr_render_material_id); getChildView("edit_selected_pbr")->setVisible(show_pbr_render_material_id && !inventory_pending); @@ -3064,7 +3001,7 @@ void LLPanelFace::onCommitColor(const LLSD& data) void LLPanelFace::onCommitShinyColor(const LLSD& data) { - LLSelectedTEMaterial::setSpecularLightColor(this, getChild("shinycolorswatch")->get()); + LLSelectedTEMaterial::setSpecularLightColor(this, mShinyColorSwatch->get()); } void LLPanelFace::onCommitAlpha(const LLSD& data) @@ -3090,7 +3027,7 @@ void LLPanelFace::onSelectColor(const LLSD& data) void LLPanelFace::onSelectShinyColor(const LLSD& data) { - LLSelectedTEMaterial::setSpecularLightColor(this, getChild("shinycolorswatch")->get()); + LLSelectedTEMaterial::setSpecularLightColor(this, mShinyColorSwatch->get()); LLSelectMgr::getInstance()->saveSelectedShinyColors(); } @@ -3109,33 +3046,31 @@ void LLPanelFace::onCommitMaterialsMedia(LLUICtrl* ctrl, void* userdata) void LLPanelFace::updateVisibility(LLViewerObject* objectp /* = nullptr */) { - LLRadioGroup* radio_mat_type = findChild("radio_material_type"); - LLRadioGroup* radio_pbr_type = findChild("radio_pbr_type"); LLComboBox* combo_shininess = findChild("combobox shininess"); LLComboBox* combo_bumpiness = findChild("combobox bumpiness"); - if (!radio_mat_type || !radio_pbr_type || !mComboMatMedia || !combo_shininess || !combo_bumpiness) + if (!mRadioMaterialType || !mRadioPbrType || !mComboMatMedia || !combo_shininess || !combo_bumpiness) { LL_WARNS("Materials") << "Combo box not found...exiting." << LL_ENDL; return; } U32 materials_media = mComboMatMedia->getCurrentIndex(); - U32 material_type = radio_mat_type->getSelectedIndex(); + U32 material_type = mRadioMaterialType->getSelectedIndex(); bool show_media = (materials_media == MATMEDIA_MEDIA) && mComboMatMedia->getEnabled(); bool show_material = materials_media == MATMEDIA_MATERIAL; bool show_texture = (show_media || (show_material && (material_type == MATTYPE_DIFFUSE) && mComboMatMedia->getEnabled())); bool show_bumpiness = show_material && (material_type == MATTYPE_NORMAL) && mComboMatMedia->getEnabled(); bool show_shininess = show_material && (material_type == MATTYPE_SPECULAR) && mComboMatMedia->getEnabled(); const bool show_pbr = mComboMatMedia->getCurrentIndex() == MATMEDIA_PBR && mComboMatMedia->getEnabled(); - const U32 pbr_type = findChild("radio_pbr_type")->getSelectedIndex(); + const U32 pbr_type = mRadioPbrType->getSelectedIndex(); const LLGLTFMaterial::TextureInfo texture_info = texture_info_from_pbrtype(pbr_type); const bool show_pbr_asset = show_pbr && texture_info == LLGLTFMaterial::GLTF_TEXTURE_INFO_COUNT; - radio_mat_type->setVisible(show_material); + mRadioMaterialType->setVisible(show_material); // Shared material controls getChildView("checkbox_sync_settings")->setVisible(show_material || show_media); getChildView("tex gen")->setVisible(show_material || show_media || show_pbr_asset); - getChildView("combobox texgen")->setVisible(show_material || show_media || show_pbr_asset); + mComboTexGen->setVisible(show_material || show_media || show_pbr_asset); getChildView("button align textures")->setVisible(show_material || show_media); // FIRE-11407 - Be consistant and hide this with the other controls @@ -3151,7 +3086,7 @@ void LLPanelFace::updateVisibility(LLViewerObject* objectp /* = nullptr */) getChildView("button align")->setVisible(show_media); // Diffuse texture controls - getChildView("texture control")->setVisible(show_texture && show_material); + mTextureCtrl->setVisible(show_texture && show_material); getChildView("label alphamode")->setVisible(show_texture && show_material); getChildView("combobox alphamode")->setVisible(show_texture && show_material); getChildView("label maskcutoff")->setVisible(false); @@ -3168,7 +3103,7 @@ void LLPanelFace::updateVisibility(LLViewerObject* objectp /* = nullptr */) getChildView("TexOffsetV")->setVisible(show_texture); // Specular map controls - getChildView("shinytexture control")->setVisible(show_shininess); + mShinyTextureCtrl->setVisible(show_shininess); getChildView("combobox shininess")->setVisible(show_shininess); getChildView("label shininess")->setVisible(show_shininess); getChildView("label glossiness")->setVisible(false); @@ -3176,7 +3111,7 @@ void LLPanelFace::updateVisibility(LLViewerObject* objectp /* = nullptr */) getChildView("label environment")->setVisible(false); getChildView("environment")->setVisible(false); getChildView("label shinycolor")->setVisible(false); - getChildView("shinycolorswatch")->setVisible(false); + mShinyColorSwatch->setVisible(false); if (show_shininess) { updateShinyControls(); @@ -3192,7 +3127,7 @@ void LLPanelFace::updateVisibility(LLViewerObject* objectp /* = nullptr */) { updateBumpyControls(); } - getChildView("bumpytexture control")->setVisible(show_bumpiness); + mBumpyTextureCtrl->setVisible(show_bumpiness); getChildView("combobox bumpiness")->setVisible(show_bumpiness); getChildView("label bumpiness")->setVisible(show_bumpiness); getChildView("bumpyScaleU")->setVisible(show_bumpiness); @@ -3259,7 +3194,6 @@ void LLPanelFace::onCommitTexGen(LLUICtrl* ctrl, void* userdata) // static void LLPanelFace::updateShinyControls(bool is_setting_texture, bool mess_with_shiny_combobox) { - //LLTextureCtrl* texture_ctrl = getChild("shinytexture control"); LLUUID shiny_texture_ID = mShinyTextureCtrl->getImageAssetID(); LL_DEBUGS("Materials") << "Shiny texture selected: " << shiny_texture_ID << LL_ENDL; LLComboBox* comboShiny = getChild("combobox shininess"); @@ -3296,10 +3230,8 @@ void LLPanelFace::updateShinyControls(bool is_setting_texture, bool mess_with_sh } } - - LLRadioGroup* radio_mat_type = getChild("radio_material_type"); U32 materials_media = mComboMatMedia->getCurrentIndex(); - U32 material_type = radio_mat_type->getSelectedIndex(); + U32 material_type = mRadioMaterialType->getSelectedIndex(); bool show_material = (materials_media == MATMEDIA_MATERIAL); bool show_shininess = show_material && (material_type == MATTYPE_SPECULAR) && mComboMatMedia->getEnabled(); U32 shiny_value = comboShiny->getCurrentIndex(); @@ -3309,13 +3241,12 @@ void LLPanelFace::updateShinyControls(bool is_setting_texture, bool mess_with_sh getChildView("label environment")->setVisible(show_shinyctrls); getChildView("environment")->setVisible(show_shinyctrls); getChildView("label shinycolor")->setVisible(show_shinyctrls); - getChildView("shinycolorswatch")->setVisible(show_shinyctrls); + mShinyColorSwatch->setVisible(show_shinyctrls); } // static void LLPanelFace::updateBumpyControls(bool is_setting_texture, bool mess_with_combobox) { - //LLTextureCtrl* texture_ctrl = getChild("bumpytexture control"); LLUUID bumpy_texture_ID = mBumpyTextureCtrl->getImageAssetID(); LL_DEBUGS("Materials") << "texture: " << bumpy_texture_ID << (mess_with_combobox ? "" : " do not") << " update combobox" << LL_ENDL; LLComboBox* comboBumpy = getChild("combobox bumpiness"); @@ -3326,9 +3257,6 @@ void LLPanelFace::updateBumpyControls(bool is_setting_texture, bool mess_with_co if (mess_with_combobox) { - LLUUID bumpy_texture_ID = mBumpyTextureCtrl->getImageAssetID(); - LL_DEBUGS("Materials") << "texture: " << bumpy_texture_ID << (mess_with_combobox ? "" : " do not") << " update combobox" << LL_ENDL; - if (!bumpy_texture_ID.isNull() && is_setting_texture) { if (!comboBumpy->itemExists(USE_TEXTURE)) @@ -3381,10 +3309,9 @@ void LLPanelFace::updateAlphaControls() } U32 mat_type = MATTYPE_DIFFUSE; - //LLRadioGroup* radio_mat_type = getChild("radio_material_type"); - if(mRadioMatType) + if(mRadioMaterialType) { - mat_type = mRadioMatType->getSelectedIndex(); + mat_type = mRadioMaterialType->getSelectedIndex(); } show_alphactrls = show_alphactrls && (mat_media == MATMEDIA_MATERIAL); @@ -3437,20 +3364,19 @@ bool LLPanelFace::onDragPbr(LLUICtrl*, LLInventoryItem* item) void LLPanelFace::onCommitPbr(const LLSD& data) { - LLTextureCtrl* pbr_ctrl = findChild("pbr_control"); - if (!pbr_ctrl) return; - if (!pbr_ctrl->getTentative()) + if (!mPBRTextureCtrl) return; + if (!mPBRTextureCtrl->getTentative()) { // we grab the item id first, because we want to do a // permissions check in the selection manager. ARGH! - LLUUID id = pbr_ctrl->getImageItemID(); + LLUUID id = mPBRTextureCtrl->getImageItemID(); if (id.isNull()) { - id = pbr_ctrl->getImageAssetID(); + id = mPBRTextureCtrl->getImageAssetID(); } if (!LLSelectMgr::getInstance()->selectionSetGLTFMaterial(id)) { - // If failed to set material, refresh pbr_ctrl's value + // If failed to set material, refresh mPBRTextureCtrl's value refresh(); } } @@ -3465,16 +3391,15 @@ void LLPanelFace::onSelectPbr(const LLSD& data) { LLSelectMgr::getInstance()->saveSelectedObjectTextures(); - LLTextureCtrl* pbr_ctrl = findChild("pbr_control"); - if (!pbr_ctrl) return; - if (!pbr_ctrl->getTentative()) + if (!mPBRTextureCtrl) return; + if (!mPBRTextureCtrl->getTentative()) { // we grab the item id first, because we want to do a // permissions check in the selection manager. ARGH! - LLUUID id = pbr_ctrl->getImageItemID(); + LLUUID id = mPBRTextureCtrl->getImageItemID(); if (id.isNull()) { - id = pbr_ctrl->getImageAssetID(); + id = mPBRTextureCtrl->getImageAssetID(); } if (!LLSelectMgr::getInstance()->selectionSetGLTFMaterial(id)) { @@ -3584,7 +3509,7 @@ void LLPanelFace::onCancelNormalTexture(const LLSD& data) U8 bumpy = 0; bool identical_bumpy = false; LLSelectedTE::getBumpmap(bumpy, identical_bumpy); - LLUUID spec_map_id = getChild("bumpytexture control")->getImageAssetID(); + LLUUID spec_map_id = mBumpyTextureCtrl->getImageAssetID(); bumpy = spec_map_id.isNull() ? bumpy : BUMPY_TEXTURE; sendBump(bumpy); } @@ -4055,13 +3980,11 @@ void LLPanelFace::onCommitRepeatsPerMeter(LLUICtrl* ctrl, void* userdata) U32 material_type = 0; if (materials_media == MATMEDIA_PBR) { - LLRadioGroup *radio_mat_type = self->getChild("radio_pbr_type"); - material_type = radio_mat_type->getSelectedIndex(); + material_type = self->mRadioPbrType->getSelectedIndex(); } if (materials_media == MATMEDIA_MATERIAL) { - LLRadioGroup *radio_mat_type = self->getChild("radio_material_type"); - material_type = radio_mat_type->getSelectedIndex(); + material_type = self->mRadioMaterialType->getSelectedIndex(); } F32 repeats_per_meter = (F32) repeats_ctrl->getValue().asReal(); @@ -4189,15 +4112,14 @@ void LLPanelFace::onClickAutoFix(void* userdata) void LLPanelFace::onAlignTexture(void* userdata) { LLPanelFace* self = (LLPanelFace*)userdata; - self->alignTestureLayer(); + self->alignTextureLayer(); } void LLPanelFace::onClickBtnLoadInvPBR(void* userdata) { // Shouldn't this be "save to inventory?" LLPanelFace* self = (LLPanelFace*)userdata; - LLTextureCtrl* pbr_ctrl = self->findChild("pbr_control"); - pbr_ctrl->showPicker(true); + self->mPBRTextureCtrl->showPicker(true); } void LLPanelFace::onClickBtnEditPBR(void* userdata) @@ -5126,7 +5048,7 @@ void LLPanelFace::updateGLTFTextureTransform(float value, U32 pbr_type, std::fun void LLPanelFace::setMaterialOverridesFromSelection() { - const U32 pbr_type = findChild("radio_pbr_type")->getSelectedIndex(); + const U32 pbr_type = mRadioPbrType->getSelectedIndex(); const LLGLTFMaterial::TextureInfo texture_info = texture_info_from_pbrtype(pbr_type); U32 texture_info_start; U32 texture_info_end; @@ -5296,7 +5218,7 @@ bool LLPanelFace::Selection::compareSelection() void LLPanelFace::onCommitGLTFTextureScaleU(LLUICtrl* ctrl) { const float value = (F32)ctrl->getValue().asReal(); - const U32 pbr_type = findChild("radio_pbr_type")->getSelectedIndex(); + const U32 pbr_type = mRadioPbrType->getSelectedIndex(); updateGLTFTextureTransform(value, pbr_type, [&](LLGLTFMaterial::TextureTransform* new_transform) { new_transform->mScale.mV[VX] = value; @@ -5306,7 +5228,7 @@ void LLPanelFace::onCommitGLTFTextureScaleU(LLUICtrl* ctrl) void LLPanelFace::onCommitGLTFTextureScaleV(LLUICtrl* ctrl) { const float value = (F32)ctrl->getValue().asReal(); - const U32 pbr_type = findChild("radio_pbr_type")->getSelectedIndex(); + const U32 pbr_type = mRadioPbrType->getSelectedIndex(); updateGLTFTextureTransform(value, pbr_type, [&](LLGLTFMaterial::TextureTransform* new_transform) { new_transform->mScale.mV[VY] = value; @@ -5316,7 +5238,7 @@ void LLPanelFace::onCommitGLTFTextureScaleV(LLUICtrl* ctrl) void LLPanelFace::onCommitGLTFRotation(LLUICtrl* ctrl) { const float value = (F32)ctrl->getValue().asReal() * DEG_TO_RAD; - const U32 pbr_type = findChild("radio_pbr_type")->getSelectedIndex(); + const U32 pbr_type = mRadioPbrType->getSelectedIndex(); updateGLTFTextureTransform(value, pbr_type, [&](LLGLTFMaterial::TextureTransform* new_transform) { new_transform->mRotation = value; @@ -5326,7 +5248,7 @@ void LLPanelFace::onCommitGLTFRotation(LLUICtrl* ctrl) void LLPanelFace::onCommitGLTFTextureOffsetU(LLUICtrl* ctrl) { const float value = (F32)ctrl->getValue().asReal(); - const U32 pbr_type = findChild("radio_pbr_type")->getSelectedIndex(); + const U32 pbr_type = mRadioPbrType->getSelectedIndex(); updateGLTFTextureTransform(value, pbr_type, [&](LLGLTFMaterial::TextureTransform* new_transform) { new_transform->mOffset.mV[VX] = value; @@ -5336,7 +5258,7 @@ void LLPanelFace::onCommitGLTFTextureOffsetU(LLUICtrl* ctrl) void LLPanelFace::onCommitGLTFTextureOffsetV(LLUICtrl* ctrl) { const float value = (F32)ctrl->getValue().asReal(); - const U32 pbr_type = findChild("radio_pbr_type")->getSelectedIndex(); + const U32 pbr_type = mRadioPbrType->getSelectedIndex(); updateGLTFTextureTransform(value, pbr_type, [&](LLGLTFMaterial::TextureTransform* new_transform) { new_transform->mOffset.mV[VY] = value; @@ -5346,13 +5268,11 @@ void LLPanelFace::onCommitGLTFTextureOffsetV(LLUICtrl* ctrl) void LLPanelFace::onTextureSelectionChanged(LLInventoryItem* itemp) { LL_DEBUGS("Materials") << "item asset " << itemp->getAssetUUID() << LL_ENDL; - //LLRadioGroup* radio_mat_type = findChild("radio_material_type"); - //if(!radio_mat_type) - if (!mRadioMatType) + if (!mRadioMaterialType) { return; } - U32 mattype = mRadioMatType->getSelectedIndex(); + U32 mattype = mRadioMaterialType->getSelectedIndex(); std::string which_control="texture control"; switch (mattype) { @@ -5398,8 +5318,7 @@ void LLPanelFace::onTextureSelectionChanged(LLInventoryItem* itemp) void LLPanelFace::onPbrSelectionChanged(LLInventoryItem* itemp) { - LLTextureCtrl* pbr_ctrl = findChild("pbr_control"); - if (pbr_ctrl) + if (mPBRTextureCtrl) { LLUUID obj_owner_id; std::string obj_owner_name; @@ -5417,12 +5336,12 @@ void LLPanelFace::onPbrSelectionChanged(LLInventoryItem* itemp) if ((can_copy && can_transfer && can_modify) || from_library) { - pbr_ctrl->setCanApply(true, true); + mPBRTextureCtrl->setCanApply(true, true); return; } // if material has (no-transfer) attribute it can be applied only for object which we own and is not for sale - pbr_ctrl->setCanApply(false, can_transfer ? true : is_object_owner && not_for_sale); + mPBRTextureCtrl->setCanApply(false, can_transfer ? true : is_object_owner && not_for_sale); if (gSavedSettings.getBOOL("TextureLivePreview")) { diff --git a/indra/newview/llpanelface.h b/indra/newview/llpanelface.h index 71c62e01f7..57baba8d79 100644 --- a/indra/newview/llpanelface.h +++ b/indra/newview/llpanelface.h @@ -43,7 +43,6 @@ class LLColorSwatchCtrl; class LLComboBox; class LLInventoryItem; class LLLineEditor; -class LLRadioGroup; class LLSpinCtrl; class LLTextBox; class LLTextureCtrl; @@ -53,6 +52,7 @@ class LLFloater; class LLMaterialID; class LLMediaCtrl; class LLMenuButton; +class LLRadioGroup; class PBRPickerAgentListener; class PBRPickerObjectListener; @@ -149,7 +149,7 @@ protected: void sendFullbright(); // applies and sends full bright void sendGlow(); - void alignTestureLayer(); + void alignTextureLayer(); void updateCopyTexButton(); @@ -333,28 +333,30 @@ private: F32 getCurrentTextureOffsetV(); // Build tool controls - LLTextureCtrl* mTextureCtrl; - LLTextureCtrl* mShinyTextureCtrl; - LLTextureCtrl* mBumpyTextureCtrl; - LLColorSwatchCtrl* mColorSwatch; - LLColorSwatchCtrl* mShinyColorSwatch; - - LLComboBox* mComboTexGen; - LLRadioGroup* mRadioMatType; - LLRadioGroup* mRadioPbrType; - - LLCheckBoxCtrl *mCheckFullbright; - - LLTextBox* mLabelColorTransp; - LLSpinCtrl* mCtrlColorTransp; // transparency = 1 - alpha - - LLSpinCtrl* mCtrlGlow; LLSpinCtrl* mCtrlRpt; // - LLComboBox *mComboMatMedia; - LLMediaCtrl *mTitleMedia; - LLTextBox *mTitleMediaText; + LLTextureCtrl* mPBRTextureCtrl = nullptr; + LLTextureCtrl* mTextureCtrl = nullptr; + LLTextureCtrl* mShinyTextureCtrl = nullptr; + LLTextureCtrl* mBumpyTextureCtrl = nullptr; + LLColorSwatchCtrl* mColorSwatch = nullptr; + LLColorSwatchCtrl* mShinyColorSwatch = nullptr; + + LLComboBox* mComboTexGen = nullptr; + + LLRadioGroup* mRadioMaterialType = nullptr; + LLRadioGroup* mRadioPbrType = nullptr; + + LLCheckBoxCtrl* mCheckFullbright = nullptr; + + LLTextBox* mLabelColorTransp = nullptr; + LLSpinCtrl* mCtrlColorTransp = nullptr; // transparency = 1 - alpha + + LLSpinCtrl* mCtrlGlow = nullptr; + LLComboBox *mComboMatMedia = nullptr; + LLMediaCtrl *mTitleMedia = nullptr; + LLTextBox *mTitleMediaText = nullptr; // Update visibility of controls to match current UI mode // (e.g. materials vs media editing) diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp index 9e18c60551..52890ff02e 100644 --- a/indra/newview/llpanelgrouproles.cpp +++ b/indra/newview/llpanelgrouproles.cpp @@ -1398,8 +1398,9 @@ void LLPanelGroupMembersSubTab::activate() if (!gdatap || !gdatap->isMemberDataComplete()) { const U32 page_size = 50; - std::string sort_column = mMembersList->getSortColumnName(); - LLGroupMgr::getInstance()->sendCapGroupMembersRequest(mGroupID, page_size, 0, sort_column); + std::string sort_column_name = mMembersList->getSortColumnName(); + bool sort_descending = !mMembersList->getSortAscending(); + LLGroupMgr::getInstance()->sendCapGroupMembersRequest(mGroupID, page_size, 0, sort_column_name, sort_descending); } if (!gdatap || !gdatap->isRoleMemberDataComplete()) diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 0fdaa4b776..b69250fece 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -240,31 +240,33 @@ bool LLPanelMainInventory::postBuild() //panel->getFilter().markDefault(); // Set up the default inv. panel/filter settings. - mActivePanel = getChild(ALL_ITEMS); - if (mActivePanel) + mAllItemsPanel = getChild(ALL_ITEMS); + if (mAllItemsPanel) { // "All Items" is the previous only view, so it gets the InventorySortOrder - mActivePanel->setSortOrder(gSavedSettings.getU32(LLInventoryPanel::DEFAULT_SORT_ORDER)); - mActivePanel->getFilter().markDefault(); - mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState); - mActivePanel->setSelectCallback(boost::bind(&LLPanelMainInventory::onSelectionChange, this, mActivePanel, _1, _2)); + mAllItemsPanel->setSortOrder(gSavedSettings.getU32(LLInventoryPanel::DEFAULT_SORT_ORDER)); + mAllItemsPanel->getFilter().markDefault(); + mAllItemsPanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState); + mAllItemsPanel->setSelectCallback(boost::bind(&LLPanelMainInventory::onSelectionChange, this, mAllItemsPanel, _1, _2)); mResortActivePanel = true; } - LLInventoryPanel* recent_items_panel = getChild(RECENT_ITEMS); - if (recent_items_panel) + mActivePanel = mAllItemsPanel; + + mRecentPanel = getChild(RECENT_ITEMS); + if (mRecentPanel) { // assign default values until we will be sure that we have setting to restore - recent_items_panel->setSinceLogoff(true); + mRecentPanel->setSinceLogoff(true); // Recent items panel should save sort order - // recent_items_panel->setSortOrder(LLInventoryFilter::SO_DATE); - recent_items_panel->setSortOrder(gSavedSettings.getU32(LLInventoryPanel::RECENTITEMS_SORT_ORDER)); + // mRecentPanel->setSortOrder(LLInventoryFilter::SO_DATE); + mRecentPanel->setSortOrder(gSavedSettings.getU32(LLInventoryPanel::RECENTITEMS_SORT_ORDER)); // - recent_items_panel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS); - LLInventoryFilter& recent_filter = recent_items_panel->getFilter(); + mRecentPanel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS); + LLInventoryFilter& recent_filter = mRecentPanel->getFilter(); recent_filter.setFilterObjectTypes(recent_filter.getFilterObjectTypes() & ~(0x1 << LLInventoryType::IT_CATEGORY)); recent_filter.setEmptyLookupMessage("InventoryNoMatchingRecentItems"); recent_filter.markDefault(); - recent_items_panel->setSelectCallback(boost::bind(&LLPanelMainInventory::onSelectionChange, this, recent_items_panel, _1, _2)); + mRecentPanel->setSelectCallback(boost::bind(&LLPanelMainInventory::onSelectionChange, this, mRecentPanel, _1, _2)); } mWornItemsPanel = getChild(WORN_ITEMS); @@ -313,12 +315,12 @@ bool LLPanelMainInventory::postBuild() // Load the persistent "Recent Items" settings. // Note that the "All Items" settings do not persist. - if(recent_items_panel) + if(mRecentPanel) { - if(savedFilterState.has(recent_items_panel->getFilter().getName())) + if(savedFilterState.has(mRecentPanel->getFilter().getName())) { LLSD recent_items = savedFilterState.get( - recent_items_panel->getFilter().getName()); + mRecentPanel->getFilter().getName()); // Fix wrong param type //LLInventoryFilter::Params p; LLInventoryPanel::InventoryState p; @@ -326,14 +328,14 @@ bool LLPanelMainInventory::postBuild() LLParamSDParser parser; parser.readSD(recent_items, p); // Fix wrong param type - //recent_items_panel->getFilter().fromParams(p); - recent_items_panel->getFilter().fromParams(p.filter); + //mRecentPanel->getFilter().fromParams(p); + mRecentPanel->getFilter().fromParams(p.filter); // // We do that earlier already - //recent_items_panel->setSortOrder(gSavedSettings.getU32(LLInventoryPanel::RECENTITEMS_SORT_ORDER)); + //mRecentPanel->setSortOrder(gSavedSettings.getU32(LLInventoryPanel::RECENTITEMS_SORT_ORDER)); // Recent items panel doesn't filter empty folders until filter floater has been opened - LLInventoryFilter& recent_filter = recent_items_panel->getFilter(); + LLInventoryFilter& recent_filter = mRecentPanel->getFilter(); recent_filter.setFilterObjectTypes(recent_filter.getFilterObjectTypes() & ~(0x1 << LLInventoryType::IT_CATEGORY)); // } @@ -489,7 +491,7 @@ LLPanelMainInventory::~LLPanelMainInventory( void ) LLInventoryPanel* LLPanelMainInventory::getAllItemsPanel() { - return getChild(ALL_ITEMS); + return mAllItemsPanel; } void LLPanelMainInventory::selectAllItemsPanel() @@ -499,7 +501,7 @@ void LLPanelMainInventory::selectAllItemsPanel() bool LLPanelMainInventory::isRecentItemsPanelSelected() { - return (RECENT_ITEMS == getActivePanel()->getName()); + return (mRecentPanel == getActivePanel()); } void LLPanelMainInventory::startSearch() @@ -1466,8 +1468,8 @@ void LLPanelMainInventory::toggleFindOptions() void LLPanelMainInventory::setSelectCallback(const LLFolderView::signal_t::slot_type& cb) { - getChild(ALL_ITEMS)->setSelectCallback(cb); - getChild(RECENT_ITEMS)->setSelectCallback(cb); + mAllItemsPanel->setSelectCallback(cb); + mRecentPanel->setSelectCallback(cb); getChild("Worn Items")->setSelectCallback(cb); } @@ -1944,10 +1946,10 @@ void LLPanelMainInventory::initListCommandsHandlers() { childSetAction("trash_btn", boost::bind(&LLPanelMainInventory::onTrashButtonClick, this)); // Keep better inventory layout childSetAction("add_btn", boost::bind(&LLPanelMainInventory::onAddButtonClick, this)); - childSetAction("view_mode_btn", boost::bind(&LLPanelMainInventory::onViewModeClick, this)); - childSetAction("up_btn", boost::bind(&LLPanelMainInventory::onUpFolderClicked, this)); - childSetAction("back_btn", boost::bind(&LLPanelMainInventory::onBackFolderClicked, this)); - childSetAction("forward_btn", boost::bind(&LLPanelMainInventory::onForwardFolderClicked, this)); + mViewModeBtn->setCommitCallback(boost::bind(&LLPanelMainInventory::onViewModeClick, this)); + mUpBtn->setCommitCallback(boost::bind(&LLPanelMainInventory::onUpFolderClicked, this)); + mBackBtn->setCommitCallback(boost::bind(&LLPanelMainInventory::onBackFolderClicked, this)); + mForwardBtn->setCommitCallback(boost::bind(&LLPanelMainInventory::onForwardFolderClicked, this)); // Keep better inventory layout mTrashButton = getChild("trash_btn"); @@ -2028,12 +2030,9 @@ void LLPanelMainInventory::initSingleFolderRoot(const LLUUID& start_folder_id) void LLPanelMainInventory::initInventoryViews() { - LLInventoryPanel* all_item = getChild(ALL_ITEMS); - all_item->initializeViewBuilding(); - LLInventoryPanel* recent_item = getChild(RECENT_ITEMS); - recent_item->initializeViewBuilding(); - LLInventoryPanel* worn_item = getChild(WORN_ITEMS); - worn_item->initializeViewBuilding(); + mAllItemsPanel->initializeViewBuilding(); + mRecentPanel->initializeViewBuilding(); + mWornItemsPanel->initializeViewBuilding(); } void LLPanelMainInventory::toggleViewMode() diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h index 2a6dc9ac4a..d35cc124c5 100644 --- a/indra/newview/llpanelmaininventory.h +++ b/indra/newview/llpanelmaininventory.h @@ -210,7 +210,9 @@ private: LLUICtrl* mCounterCtrl; LLHandle mFinderHandle; LLInventoryPanel* mActivePanel; - LLInventoryPanel* mWornItemsPanel; + LLInventoryPanel* mAllItemsPanel = nullptr; + LLInventoryPanel* mRecentPanel = nullptr; + LLInventoryPanel* mWornItemsPanel = nullptr; bool mResortActivePanel; LLSaveFolderState* mSavedFolderState; std::string mFilterText; diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp index 83acfd109b..d6b191e3de 100644 --- a/indra/newview/llpaneloutfitedit.cpp +++ b/indra/newview/llpaneloutfitedit.cpp @@ -441,6 +441,8 @@ LLPanelOutfitEdit::~LLPanelOutfitEdit() delete mCOFDragAndDropObserver; + delete mWearableListViewItemsComparator; + while (!mListViewItemTypes.empty()) { delete mListViewItemTypes.back(); mListViewItemTypes.pop_back(); @@ -483,8 +485,10 @@ bool LLPanelOutfitEdit::postBuild() mFolderViewBtn = getChild("folder_view_btn"); mListViewBtn = getChild("list_view_btn"); + mFilterPanel = getChild("filter_panel"); + mFilterBtn = getChild("filter_button"); + mFilterBtn->setCommitCallback(boost::bind(&LLPanelOutfitEdit::showWearablesFilter, this)); - childSetCommitCallback("filter_button", boost::bind(&LLPanelOutfitEdit::showWearablesFilter, this), NULL); childSetCommitCallback("folder_view_btn", boost::bind(&LLPanelOutfitEdit::showWearablesFolderView, this), NULL); childSetCommitCallback("folder_view_btn", boost::bind(&LLPanelOutfitEdit::saveListSelection, this), NULL); childSetCommitCallback("list_view_btn", boost::bind(&LLPanelOutfitEdit::showWearablesListView, this), NULL); @@ -537,13 +541,17 @@ bool LLPanelOutfitEdit::postBuild() mSearchFilter = getChild("look_item_filter"); mSearchFilter->setCommitCallback(boost::bind(&LLPanelOutfitEdit::onSearchEdit, this, _2)); - childSetAction("show_add_wearables_btn", boost::bind(&LLPanelOutfitEdit::onAddMoreButtonClicked, this)); + mShowAddWearablesBtn = getChild("show_add_wearables_btn"); + mShowAddWearablesBtn->setClickedCallback(boost::bind(&LLPanelOutfitEdit::onAddMoreButtonClicked, this)); mPlusBtn = getChild("plus_btn"); mPlusBtn->setClickedCallback(boost::bind(&LLPanelOutfitEdit::onPlusBtnClicked, this)); childSetAction(REVERT_BTN, boost::bind(&LLAppearanceMgr::wearBaseOutfit, LLAppearanceMgr::getInstance())); + mNoAddWearablesButtonBar = getChild("no_add_wearables_button_bar"); + mAddWearablesButtonBar = getChild("add_wearables_button_bar"); + /* * By default AT_CLOTHING are sorted by (in in MY OUTFITS): * - by type (types order determined in LLWearableType::EType) @@ -574,11 +582,15 @@ bool LLPanelOutfitEdit::postBuild() getChild(SAVE_BTN)->setCommitCallback(boost::bind(&LLPanelOutfitEdit::saveOutfit, this, false)); getChild(SAVE_AS_BTN)->setCommitCallback(boost::bind(&LLPanelOutfitEdit::saveOutfit, this, true)); + mLoadingIndicator = getChild("edit_outfit_loading_indicator"); + mOutfitNameStatusPanel = getChild("outfit_name_and_status"); + // Show avatar complexity in appearance floater mAvatarComplexityLabel = getChild("avatar_complexity_label"); mAvatarComplexityAddingLabel = getChild("avatar_complexity_adding_label"); onOutfitChanging(gAgentWearables.isCOFChangeInProgress()); + return true; } @@ -618,15 +630,15 @@ void LLPanelOutfitEdit::showAddWearablesPanel(bool show_add_wearables) mAddWearablesPanel->setVisible(show_add_wearables); - getChild("show_add_wearables_btn")->setValue(show_add_wearables); + mShowAddWearablesBtn->setValue(show_add_wearables); updateFiltersVisibility(); - getChildView("filter_button")->setVisible( show_add_wearables); + mFilterBtn->setVisible( show_add_wearables); //search filter should be disabled if (!show_add_wearables) { - getChild("filter_button")->setValue(false); + mFilterBtn->setValue(false); mFolderViewFilterCmbBox->setVisible(false); mListViewFilterCmbBox->setVisible(false); @@ -653,15 +665,15 @@ void LLPanelOutfitEdit::showAddWearablesPanel(bool show_add_wearables) } //switching button bars - getChildView("no_add_wearables_button_bar")->setVisible( !show_add_wearables); - getChildView("add_wearables_button_bar")->setVisible( show_add_wearables); + mNoAddWearablesButtonBar->setVisible( !show_add_wearables); + mAddWearablesButtonBar->setVisible( show_add_wearables); } void LLPanelOutfitEdit::showWearablesFilter() { - bool filter_visible = getChild("filter_button")->getValue(); + bool filter_visible = mFilterBtn->getValue(); - getChildView("filter_panel")->setVisible( filter_visible); + mFilterPanel->setVisible(filter_visible); if(!filter_visible) { @@ -1324,19 +1336,17 @@ static void update_status_widget_rect(LLView * widget, S32 right_border) void LLPanelOutfitEdit::onOutfitChanging(bool started) { - static LLLoadingIndicator* indicator = getChild("edit_outfit_loading_indicator"); - static LLView* status_panel = getChild("outfit_name_and_status"); - static S32 indicator_delta = status_panel->getRect().getWidth() - indicator->getRect().mLeft; + S32 indicator_delta = mOutfitNameStatusPanel->getRect().getWidth() - mLoadingIndicator->getRect().mLeft; S32 delta = started ? indicator_delta : 0; - S32 right_border = status_panel->getRect().getWidth() - delta; + S32 right_border = mOutfitNameStatusPanel->getRect().getWidth() - delta; if (mCurrentOutfitName) update_status_widget_rect(mCurrentOutfitName, right_border); if (mStatus) update_status_widget_rect(mStatus, right_border); - indicator->setVisible(started); + mLoadingIndicator->setVisible(started); } void LLPanelOutfitEdit::getCurrentItemUUID(LLUUID& selected_id) diff --git a/indra/newview/llpaneloutfitedit.h b/indra/newview/llpaneloutfitedit.h index 479490af0d..f8ab2bef07 100644 --- a/indra/newview/llpaneloutfitedit.h +++ b/indra/newview/llpaneloutfitedit.h @@ -59,6 +59,7 @@ class LLMenuGL; class LLFindNonLinksByMask; class LLFindWearablesOfType; class LLWearableItemTypeNameComparator; +class LLLoadingIndicator; class LLPanelOutfitEdit : public LLPanel { @@ -221,7 +222,15 @@ private: LLButton* mFolderViewBtn; LLButton* mListViewBtn; LLButton* mPlusBtn; + LLButton* mShowAddWearablesBtn = nullptr; + LLButton* mFilterBtn = nullptr; LLPanel* mAddWearablesPanel; + LLPanel* mOutfitNameStatusPanel = nullptr; + LLLoadingIndicator* mLoadingIndicator = nullptr; + LLView* mFilterPanel = nullptr; + LLUICtrl* mNoAddWearablesButtonBar = nullptr; + LLUICtrl* mAddWearablesButtonBar = nullptr; + // Show avatar complexity in appearance floater LLTextBox* mAvatarComplexityLabel; LLTextBox* mAvatarComplexityAddingLabel; diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp index dc2dbe0194..084d2cc2de 100644 --- a/indra/newview/llpaneloutfitsinventory.cpp +++ b/indra/newview/llpaneloutfitsinventory.cpp @@ -292,7 +292,8 @@ void LLPanelOutfitsInventory::openApearanceTab(const std::string& tab_name) void LLPanelOutfitsInventory::initListCommandsHandlers() { mListCommands = getChild("bottom_panel"); - mListCommands->childSetAction("wear_btn", boost::bind(&LLPanelOutfitsInventory::onWearButtonClick, this)); + mWearBtn = mListCommands->getChild("wear_btn"); + mWearBtn->setCommitCallback(boost::bind(&LLPanelOutfitsInventory::onWearButtonClick, this)); mMyOutfitsPanel->childSetAction("trash_btn", boost::bind(&LLPanelOutfitsInventory::onTrashButtonClick, this)); mOutfitGalleryPanel->childSetAction("trash_btn", boost::bind(&LLPanelOutfitsInventory::onTrashButtonClick, this)); } @@ -303,14 +304,12 @@ void LLPanelOutfitsInventory::updateListCommands() bool wear_enabled = isActionEnabled("wear"); bool wear_visible = !isCOFPanelActive(); bool make_outfit_enabled = isActionEnabled("save_outfit"); - - LLButton* wear_btn = mListCommands->getChild("wear_btn"); mMyOutfitsPanel->childSetEnabled("trash_btn", trash_enabled); mOutfitGalleryPanel->childSetEnabled("trash_btn", trash_enabled); - wear_btn->setEnabled(wear_enabled); - wear_btn->setVisible(wear_visible); + mWearBtn->setEnabled(wear_enabled); + mWearBtn->setVisible(wear_visible); getChild(SAVE_BTN)->setEnabled(make_outfit_enabled); - wear_btn->setToolTip(getString((!isOutfitsGalleryPanelActive() && mMyOutfitsPanel->hasItemSelected()) ? "wear_items_tooltip" : "wear_outfit_tooltip")); + mWearBtn->setToolTip(getString((!isOutfitsGalleryPanelActive() && mMyOutfitsPanel->hasItemSelected()) ? "wear_items_tooltip" : "wear_outfit_tooltip")); } void LLPanelOutfitsInventory::onTrashButtonClick() diff --git a/indra/newview/llpaneloutfitsinventory.h b/indra/newview/llpaneloutfitsinventory.h index 7e8a0e799d..f834a8d45c 100644 --- a/indra/newview/llpaneloutfitsinventory.h +++ b/indra/newview/llpaneloutfitsinventory.h @@ -116,6 +116,7 @@ protected: private: LLPanel* mListCommands; LLMenuGL* mMenuAdd; + LLButton* mWearBtn = nullptr; // List Commands // ////////////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 0677e0efcd..7a1a538693 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -170,8 +170,6 @@ public: id_it = uuids.begin(), id_end = uuids.end(); - LLAvatarItemDistanceComparator::id_to_pos_map_t pos_map; - mAvatarsPositions.clear(); for (;pos_it != pos_end && id_it != id_end; ++pos_it, ++id_it ) @@ -673,17 +671,14 @@ bool LLPanelPeople::postBuild() //S32 max_premium = LLAgentBenefitsMgr::get("Premium").getGroupMembershipLimit(); // - // Firestorm radar - //mNearbyFilterCommitConnection = getChild("nearby_filter_input")->setCommitCallback(boost::bind(&LLPanelPeople::onFilterEdit, this, _2)); - mFriedsFilterCommitConnection = getChild("friends_filter_input")->setCommitCallback(boost::bind(&LLPanelPeople::onFilterEdit, this, _2)); - mGroupsFilterCommitConnection = getChild("groups_filter_input")->setCommitCallback(boost::bind(&LLPanelPeople::onFilterEdit, this, _2)); - mRecentFilterCommitConnection = getChild("recent_filter_input")->setCommitCallback(boost::bind(&LLPanelPeople::onFilterEdit, this, _2)); - + LLPanel* group_tab = getChild(GROUP_TAB_NAME); + mGroupDelBtn = group_tab->getChild("minus_btn"); + mGroupCountText = group_tab->getChild("groupcount"); // Don't bother with "want more?" advertisement //if(LLAgentBenefitsMgr::current().getGroupMembershipLimit() < max_premium) //{ - // getChild("groupcount")->setText(getString("GroupCountWithInfo")); - // getChild("groupcount")->setURLClickedCallback(boost::bind(&LLPanelPeople::onGroupLimitInfo, this)); + // mGroupCountText->setText(getString("GroupCountWithInfo")); + // mGroupCountText->setURLClickedCallback(boost::bind(&LLPanelPeople::onGroupLimitInfo, this)); //} // mTabContainer = getChild("tabs"); @@ -696,6 +691,9 @@ bool LLPanelPeople::postBuild() friends_tab->setVisibleCallback(boost::bind(&Updater::setActive, mFriendListUpdater, _2)); friends_tab->setVisibleCallback(boost::bind(&LLPanelPeople::removePicker, this)); + mFriendsGearBtn = friends_tab->getChild("gear_btn"); + mFriendsDelFriendBtn = friends_tab->getChild("friends_del_btn"); + // FIRE-4740: Friend counter in people panel mFriendsTabContainer = friends_tab->findChild("friends_accordion"); // Firestorm radar @@ -703,11 +701,11 @@ bool LLPanelPeople::postBuild() mAllFriendList = friends_tab->getChild("avatars_all"); mOnlineFriendList->setNoItemsCommentText(getString("no_friends_online")); mOnlineFriendList->setShowIcons("FriendsListShowIcons"); - mOnlineFriendList->showPermissions("FriendsListShowPermissions"); + mOnlineFriendList->showPermissions(gSavedSettings.getBOOL("FriendsListShowPermissions")); mOnlineFriendList->setShowCompleteName(!gSavedSettings.getBOOL("FriendsListHideUsernames")); mAllFriendList->setNoItemsCommentText(getString("no_friends")); mAllFriendList->setShowIcons("FriendsListShowIcons"); - mAllFriendList->showPermissions("FriendsListShowPermissions"); + mAllFriendList->showPermissions(gSavedSettings.getBOOL("FriendsListShowPermissions")); mAllFriendList->setShowCompleteName(!gSavedSettings.getBOOL("FriendsListHideUsernames")); LLPanel* nearby_tab = getChild(NEARBY_TAB_NAME); @@ -732,23 +730,36 @@ bool LLPanelPeople::postBuild() //mNearbyList->setRlvCheckShowNames(true); // [/RLVa:KB] - mMiniMap = (LLNetMap*)getChildView("Net Map",true); + mMiniMap = nearby_tab->getChild("Net Map", true); // Synchronize tooltips throughout instances //mMiniMap->setToolTipMsg(gSavedSettings.getBOOL("DoubleClickTeleport") ? // getString("AltMiniMapToolTipMsg") : getString("MiniMapToolTipMsg")); // Synchronize tooltips throughout instances - mRecentList = getChild(RECENT_TAB_NAME)->getChild("avatar_list"); + mNearbyGearBtn = nearby_tab->getChild("gear_btn"); + mNearbyAddFriendBtn = nearby_tab->getChild("add_friend_btn"); + + LLPanel* recent_tab = getChild(RECENT_TAB_NAME); + mRecentList = recent_tab->getChild("avatar_list"); mRecentList->setNoItemsCommentText(getString("no_recent_people")); mRecentList->setNoItemsMsg(getString("no_recent_people")); mRecentList->setNoFilteredItemsMsg(getString("no_filtered_recent_people")); mRecentList->setShowIcons("RecentListShowIcons"); - mGroupList = getChild("group_list"); + mRecentGearBtn = recent_tab->getChild("gear_btn"); + mRecentAddFriendBtn = recent_tab->getChild("add_friend_btn"); + + mGroupList = group_tab->getChild("group_list"); mGroupList->setNoItemsCommentText(getString("no_groups_msg")); mGroupList->setNoItemsMsg(getString("no_groups_msg")); mGroupList->setNoFilteredItemsMsg(getString("no_filtered_groups_msg")); + // Firestorm radar + //mNearbyFilterCommitConnection = nearby_tab->getChild("nearby_filter_input")->setCommitCallback(boost::bind(&LLPanelPeople::onFilterEdit, this, _2)); + mFriedsFilterCommitConnection = friends_tab->getChild("friends_filter_input")->setCommitCallback(boost::bind(&LLPanelPeople::onFilterEdit, this, _2)); + mRecentFilterCommitConnection = recent_tab->getChild("recent_filter_input")->setCommitCallback(boost::bind(&LLPanelPeople::onFilterEdit, this, _2)); + mGroupsFilterCommitConnection = group_tab->getChild("groups_filter_input")->setCommitCallback(boost::bind(&LLPanelPeople::onFilterEdit, this, _2)); + // Use Firestorm radar menu handler //mNearbyList->setContextMenu(&LLPanelPeopleMenus::gNearbyPeopleContextMenu); // @@ -978,13 +989,11 @@ void LLPanelPeople::updateRecentList() void LLPanelPeople::updateButtons() { - std::string cur_tab = getActiveTabName(); -// [RLVa:KB] - Checked: RLVa-1.4.9 + const std::string& cur_tab = getActiveTabName(); bool nearby_tab_active = (cur_tab == NEARBY_TAB_NAME); -// [/RLVa:KB] bool friends_tab_active = (cur_tab == FRIENDS_TAB_NAME); bool group_tab_active = (cur_tab == GROUP_TAB_NAME); - //bool recent_tab_active = (cur_tab == RECENT_TAB_NAME); + bool recent_tab_active = (cur_tab == RECENT_TAB_NAME); LLUUID selected_id; uuid_vec_t selected_uuids; @@ -999,16 +1008,15 @@ void LLPanelPeople::updateButtons() selected_id = mGroupList->getSelectedUUID(); } - LLPanel* groups_panel = mTabContainer->getCurrentPanel(); - groups_panel->getChildView("minus_btn")->setEnabled(item_selected && selected_id.notNull()); // a real group selected + mGroupDelBtn->setEnabled(item_selected && selected_id.notNull()); // a real group selected // FIRE-12229 //U32 groups_count = static_cast(gAgent.mGroups.size()); //U32 max_groups = LLAgentBenefitsMgr::current().getGroupMembershipLimit(); //U32 groups_remaining = max_groups > groups_count ? max_groups - groups_count : 0; - //groups_panel->getChild("groupcount")->setTextArg("[COUNT]", llformat("%d", groups_count)); - //groups_panel->getChild("groupcount")->setTextArg("[REMAINING]", llformat("%d", groups_remaining)); - getChild("groupcount")->setValue(FSCommon::populateGroupCount()); + //mGroupCountText->setTextArg("[COUNT]", llformat("%d", groups_count)); + //mGroupCountText->setTextArg("[REMAINING]", llformat("%d", groups_remaining)); + mGroupCountText->setValue(FSCommon::populateGroupCount()); // } else @@ -1023,40 +1031,39 @@ void LLPanelPeople::updateButtons() is_self = gAgent.getID() == selected_id; } - LLPanel* cur_panel = mTabContainer->getCurrentPanel(); - if (cur_panel) { - // RLVa check - //if (cur_panel->hasChild("add_friend_btn", true)) - // cur_panel->getChildView("add_friend_btn")->setEnabled(item_selected && !is_friend && !is_self); - if (!nearby_tab_active && cur_panel->hasChild("add_friend_btn", true)) - cur_panel->getChildView("add_friend_btn")->setEnabled(item_selected && !is_friend && !is_self && RlvActions::canShowName(RlvActions::SNC_DEFAULT, selected_id)); - // RLVa check - + // Firestorm radar + //if(nearby_tab_active) + //{ + // mNearbyAddFriendBtn->setEnabled(item_selected && !is_friend && !is_self); + // mNearbyGearBtn->setEnabled(multiple_selected); + //} + // Firestorm radar if (friends_tab_active) { - cur_panel->getChildView("friends_del_btn")->setEnabled(multiple_selected); + mFriendsDelFriendBtn->setEnabled(multiple_selected); + mFriendsGearBtn->setEnabled(multiple_selected); } - // Fix warning about missing gear button on blocklist panel - //if (!group_tab_active) - if (!group_tab_active && !nearby_tab_active && cur_tab != BLOCKED_TAB_NAME) - // + if (recent_tab_active) { - cur_panel->getChildView("gear_btn")->setEnabled(multiple_selected); + // RLVa check + //mRecentAddFriendBtn->setEnabled(item_selected && !is_friend && !is_self); + mRecentAddFriendBtn->setEnabled(item_selected && !is_friend && !is_self && RlvActions::canShowName(RlvActions::SNC_DEFAULT, selected_id)); + mRecentGearBtn->setEnabled(multiple_selected); } } } } -std::string LLPanelPeople::getActiveTabName() const +const std::string& LLPanelPeople::getActiveTabName() const { return mTabContainer->getCurrentPanel()->getName(); } LLUUID LLPanelPeople::getCurrentItemID() const { - std::string cur_tab = getActiveTabName(); + const std::string& cur_tab = getActiveTabName(); if (cur_tab == FRIENDS_TAB_NAME) // this tab has two lists { @@ -1093,7 +1100,7 @@ LLUUID LLPanelPeople::getCurrentItemID() const void LLPanelPeople::getCurrentItemIDs(uuid_vec_t& selected_uuids) const { - std::string cur_tab = getActiveTabName(); + const std::string& cur_tab = getActiveTabName(); if (cur_tab == FRIENDS_TAB_NAME) { @@ -1193,7 +1200,7 @@ void LLPanelPeople::onFilterEdit(const std::string& search_string) saved_filter = search_upper; // Apply new filter to the current tab. - const std::string cur_tab = getActiveTabName(); + const std::string& cur_tab = getActiveTabName(); if (cur_tab == NEARBY_TAB_NAME) { mNearbyList->setNameFilter(filter); diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index b2fe520b4c..0824b9580a 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -106,7 +106,7 @@ private: bool isItemsFreeOfFriends(const uuid_vec_t& uuids); void updateButtons(); - std::string getActiveTabName() const; + const std::string& getActiveTabName() const; LLUUID getCurrentItemID() const; void getCurrentItemIDs(uuid_vec_t& selected_uuids) const; void setSortOrder(LLAvatarList* list, ESortOrder order, bool save = true); @@ -167,6 +167,17 @@ private: // FIRE-4740: Friend counter in people panel LLTabContainer* mFriendsTabContainer; + LLButton* mNearbyGearBtn = nullptr; + LLButton* mFriendsGearBtn = nullptr; + LLButton* mRecentGearBtn = nullptr; + LLButton* mGroupDelBtn = nullptr; + + LLButton* mNearbyAddFriendBtn = nullptr; + LLButton* mRecentAddFriendBtn = nullptr; + LLUICtrl* mFriendsDelFriendBtn = nullptr; + + LLTextBox* mGroupCountText = nullptr; + std::vector mSavedOriginalFilters; std::vector mSavedFilters; diff --git a/indra/newview/llprogressview.cpp b/indra/newview/llprogressview.cpp index e2729c41f7..98d412579b 100644 --- a/indra/newview/llprogressview.cpp +++ b/indra/newview/llprogressview.cpp @@ -469,7 +469,7 @@ void LLProgressView::initLogos() //#endif // defined(LL_FMODSTUDIO) || defined(LL_HAVOK) // FIRE-30937: Always needed // We don't know final screen rect yet, so we can't precalculate position fully - S32 texture_start_x = (S32)mLogosLabel->getFont()->getWidthF32(mLogosLabel->getText()) + default_pad; + S32 texture_start_x = (S32)mLogosLabel->getFont()->getWidthF32(mLogosLabel->getWText().c_str()) + default_pad; S32 texture_start_y = -7; // Normally we would just preload these textures from textures.xml, diff --git a/indra/newview/llscrollingpanelparambase.cpp b/indra/newview/llscrollingpanelparambase.cpp index 4bda0549e2..ed17c3d7c9 100644 --- a/indra/newview/llscrollingpanelparambase.cpp +++ b/indra/newview/llscrollingpanelparambase.cpp @@ -51,12 +51,13 @@ LLScrollingPanelParamBase::LLScrollingPanelParamBase( const LLPanel::Params& pan else buildFromFile( "panel_scrolling_param_base.xml"); - getChild("param slider")->setValue(weightToPercent(param->getWeight())); + mParamSlider = getChild("param slider"); + mParamSlider->setValue(weightToPercent(param->getWeight())); std::string display_name = LLTrans::getString(param->getDisplayName()); - getChild("param slider")->setLabelArg("[DESC]", display_name); - getChildView("param slider")->setEnabled(mAllowModify); - childSetCommitCallback("param slider", LLScrollingPanelParamBase::onSliderMoved, this); + mParamSlider->setLabelArg("[DESC]", display_name); + mParamSlider->setEnabled(mAllowModify); + mParamSlider->setCommitCallback(LLScrollingPanelParamBase::onSliderMoved, this); setVisible(false); setBorderVisible( false ); @@ -77,9 +78,9 @@ void LLScrollingPanelParamBase::updatePanel(bool allow_modify) } F32 current_weight = mWearable->getVisualParamWeight( param->getID() ); - getChild("param slider")->setValue(weightToPercent( current_weight ) ); + mParamSlider->setValue(weightToPercent( current_weight ) ); mAllowModify = allow_modify; - getChildView("param slider")->setEnabled(mAllowModify); + mParamSlider->setEnabled(mAllowModify); } // static diff --git a/indra/newview/llscrollingpanelparambase.h b/indra/newview/llscrollingpanelparambase.h index 9deafcc81a..d5477a8397 100644 --- a/indra/newview/llscrollingpanelparambase.h +++ b/indra/newview/llscrollingpanelparambase.h @@ -55,6 +55,7 @@ public: public: LLViewerVisualParam* mParam; protected: + LLUICtrl* mParamSlider = nullptr; bool mAllowModify; LLWearable *mWearable; }; diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp index 9f0c4eecdb..682e79a578 100644 --- a/indra/newview/llsidepanelappearance.cpp +++ b/indra/newview/llsidepanelappearance.cpp @@ -39,6 +39,7 @@ #include "llfloaterreg.h" #include "llfloaterworldmap.h" #include "llfolderviewmodel.h" +#include "llloadingindicator.h" #include "lloutfitobserver.h" #include "llpaneleditwearable.h" #include "llpaneloutfitsinventory.h" @@ -139,6 +140,8 @@ bool LLSidepanelAppearance::postBuild() mCurrOutfitPanel = getChild("panel_currentlook"); + mWearableLoadingIndicator = getChild("wearables_loading_indicator"); + mEditOutfitBtn = getChild("edit_outfit_btn"); setVisibleCallback(boost::bind(&LLSidepanelAppearance::onVisibilityChanged,this,_2)); @@ -543,8 +546,8 @@ void LLSidepanelAppearance::inventoryFetched() void LLSidepanelAppearance::setWearablesLoading(bool val) { - getChildView("wearables_loading_indicator")->setVisible( val); - getChildView("edit_outfit_btn")->setVisible( !val); + mWearableLoadingIndicator->setVisible(val); + mEditOutfitBtn->setVisible(!val); if (!val) { diff --git a/indra/newview/llsidepanelappearance.h b/indra/newview/llsidepanelappearance.h index ec2042ae55..7ff46bf2bf 100644 --- a/indra/newview/llsidepanelappearance.h +++ b/indra/newview/llsidepanelappearance.h @@ -38,6 +38,7 @@ class LLCurrentlyWornFetchObserver; class LLPanelEditWearable; class LLViewerWearable; class LLPanelOutfitsInventory; +class LLLoadingIndicator; class LLSidepanelAppearance : public LLPanel { @@ -101,8 +102,11 @@ private: LLButton* mOpenOutfitBtn; LLButton* mEditAppearanceBtn; + LLButton* mEditOutfitBtn = nullptr; LLPanel* mCurrOutfitPanel; + LLLoadingIndicator* mWearableLoadingIndicator = nullptr; + LLTextBox* mCurrentLookName; LLTextBox* mOutfitStatus; diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp index ca2d86c5ea..9db4dc5f3f 100644 --- a/indra/newview/llwearableitemslist.cpp +++ b/indra/newview/llwearableitemslist.cpp @@ -108,21 +108,27 @@ LLPanelWearableOutfitItem::Params::Params() bool LLPanelWearableOutfitItem::postBuild() { + if (mShowWidgets) + { + mAddWearableBtn = getChild("add_wearable"); + mRemoveWearableBtn = getChild("remove_wearable"); + } + LLPanelWearableListItem::postBuild(); //if(mShowWidgets) // Make Add/Remove buttons work { // Make Add/Remove buttons work - //addWidgetToRightSide("add_wearable"); - //addWidgetToRightSide("remove_wearable"); + //addWidgetToRightSide(mAddWearableBtn); + //addWidgetToRightSide(mAddWearableBtn); LLViewerInventoryItem* inv_item = getItem(); mShowWidgets &= (inv_item->getType() != LLAssetType::AT_BODYPART); - addWidgetToRightSide("add_wearable", mShowWidgets); - addWidgetToRightSide("remove_wearable", mShowWidgets); + addWidgetToRightSide(mAddWearableBtn, mShowWidgets); + addWidgetToRightSide(mAddWearableBtn, mShowWidgets); // - childSetAction("add_wearable", boost::bind(&LLPanelWearableOutfitItem::onAddWearable, this)); - childSetAction("remove_wearable", boost::bind(&LLPanelWearableOutfitItem::onRemoveWearable, this)); + mAddWearableBtn->setClickedCallback(boost::bind(&LLPanelWearableOutfitItem::onAddWearable, this)); + mRemoveWearableBtn->setClickedCallback(boost::bind(&LLPanelWearableOutfitItem::onRemoveWearable, this)); setWidgetsVisible(false); reshapeWidgets(); @@ -253,14 +259,14 @@ void LLPanelWearableOutfitItem::updateItem(const std::string& name, if(mShowWidgets) { - setShowWidget("add_wearable", !is_worn); + setShowWidget(mAddWearableBtn, !is_worn); // Make Add/Remove buttons work //// Body parts can't be removed, only replaced //LLViewerInventoryItem* inv_item = getItem(); //bool show_remove = is_worn && inv_item && (inv_item->getType() != LLAssetType::AT_BODYPART); //setShowWidget("remove_wearable", show_remove); - setShowWidget("remove_wearable", is_worn); + setShowWidget(mRemoveWearableBtn, is_worn); // if(mHovered) diff --git a/indra/newview/llwearableitemslist.h b/indra/newview/llwearableitemslist.h index c2a120f74f..f22f44b40d 100644 --- a/indra/newview/llwearableitemslist.h +++ b/indra/newview/llwearableitemslist.h @@ -104,6 +104,8 @@ protected: bool worn_indication_enabled, const Params& params, bool show_widgets = false); private: + LLButton* mAddWearableBtn = nullptr; + LLButton* mRemoveWearableBtn = nullptr; bool mWornIndicationEnabled; // Make Add/Remove buttons work protected: diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp index 25983e19bc..8ca9d2ebe2 100644 --- a/indra/newview/llworldmapview.cpp +++ b/indra/newview/llworldmapview.cpp @@ -1197,21 +1197,23 @@ void LLWorldMapView::drawTracking(const LLVector3d& pos_global, const LLColor4& drawImage(pos_global, sTrackCircleImage, color); } - // clamp text position to on-screen - const S32 TEXT_PADDING = DEFAULT_TRACKING_ARROW_SIZE + 2; - S32 half_text_width = llfloor(font->getWidthF32(label) * 0.5f); - text_x = llclamp(text_x, half_text_width + TEXT_PADDING, getRect().getWidth() - half_text_width - TEXT_PADDING); - text_y = llclamp(text_y + vert_offset, TEXT_PADDING + vert_offset, getRect().getHeight() - font->getLineHeight() - TEXT_PADDING - vert_offset); - // if (label != "") // [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.4.5) | Added: RLVa-1.0.0 if ( (label != "") && (RlvActions::canShowLocation()) ) // [/RLVa:KB] { - font->renderUTF8( - label, 0, - text_x, - text_y, + // clamp text position to on-screen + const S32 TEXT_PADDING = DEFAULT_TRACKING_ARROW_SIZE + 2; + + LLWString wlabel = utf8string_to_wstring(label); + S32 half_text_width = llfloor(font->getWidthF32(wlabel.c_str()) * 0.5f); + text_x = llclamp(text_x, half_text_width + TEXT_PADDING, getRect().getWidth() - half_text_width - TEXT_PADDING); + text_y = llclamp(text_y + vert_offset, TEXT_PADDING + vert_offset, getRect().getHeight() - font->getLineHeight() - TEXT_PADDING - vert_offset); + + font->render( + wlabel, 0, + (F32)text_x, + (F32)text_y, LLColor4::white, LLFontGL::HCENTER, LLFontGL::BASELINE, LLFontGL::NORMAL, LLFontGL::DROP_SHADOW);