void LLChatHistory::initFromParams(const LLChatHistory::Params& p) { static LLUICachedControl<S32> scrollbar_size ("UIScrollbarSize", 0); LLRect stack_rect = getLocalRect(); stack_rect.mRight -= scrollbar_size; LLLayoutStack::Params layout_p; layout_p.rect = stack_rect; layout_p.follows.flags = FOLLOWS_ALL; layout_p.orientation = "vertical"; layout_p.mouse_opaque = false; LLLayoutStack* stackp = LLUICtrlFactory::create<LLLayoutStack>(layout_p, this); const S32 NEW_TEXT_NOTICE_HEIGHT = 20; LLLayoutPanel::Params panel_p; panel_p.name = "spacer"; panel_p.background_visible = false; panel_p.has_border = false; panel_p.mouse_opaque = false; panel_p.min_dim = 30; panel_p.max_dim = S32_MAX; panel_p.auto_resize = true; panel_p.user_resize = false; stackp->addPanel(LLUICtrlFactory::create<LLLayoutPanel>(panel_p), LLLayoutStack::ANIMATE); panel_p.name = "new_text_notice_holder"; LLRect new_text_notice_rect = getLocalRect(); new_text_notice_rect.mTop = new_text_notice_rect.mBottom + NEW_TEXT_NOTICE_HEIGHT; panel_p.rect = new_text_notice_rect; panel_p.background_opaque = true; panel_p.background_visible = true; panel_p.visible = false; panel_p.min_dim = 0; panel_p.auto_resize = false; panel_p.user_resize = false; mMoreChatPanel = LLUICtrlFactory::create<LLLayoutPanel>(panel_p); LLTextBox::Params text_p(p.more_chat_text); text_p.rect = mMoreChatPanel->getLocalRect(); text_p.follows.flags = FOLLOWS_ALL; text_p.name = "more_chat_text"; mMoreChatText = LLUICtrlFactory::create<LLTextBox>(text_p, mMoreChatPanel); mMoreChatText->setClickedCallback(boost::bind(&LLChatHistory::onClickMoreText, this)); stackp->addPanel(mMoreChatPanel, LLLayoutStack::ANIMATE); }
LLSliderCtrl::LLSliderCtrl(const LLSliderCtrl::Params& p) : LLF32UICtrl(p), mLabelBox( NULL ), mEditor( NULL ), mTextBox( NULL ), mFont(p.font), mShowText(p.show_text), mCanEditText(p.can_edit_text), mPrecision(p.decimal_digits), mTextEnabledColor(p.text_color()), mTextDisabledColor(p.text_disabled_color()) { S32 top = getRect().getHeight(); S32 bottom = 0; S32 left = 0; S32 label_width = p.label_width; S32 text_width = p.text_width; // Label if( !p.label().empty() ) { if (!p.label_width.isProvided()) { label_width = p.font()->getWidth(p.label); } LLRect label_rect( left, top, label_width, bottom ); LLTextBox::Params params(p.slider_label); params.rect.setIfNotProvided(label_rect); params.font.setIfNotProvided(p.font); params.initial_value(p.label()); mLabelBox = LLUICtrlFactory::create<LLTextBox> (params); addChild(mLabelBox); } if (p.show_text && !p.text_width.isProvided()) { // calculate the size of the text box (log max_value is number of digits - 1 so plus 1) if ( p.max_value ) text_width = p.font()->getWidth(std::string("0")) * ( static_cast < S32 > ( log10 ( p.max_value ) ) + p.decimal_digits + 1 ); if ( p.increment < 1.0f ) text_width += p.font()->getWidth(std::string(".")); // (mostly) take account of decimal point in value if ( p.min_value < 0.0f || p.max_value < 0.0f ) text_width += p.font()->getWidth(std::string("-")); // (mostly) take account of minus sign // padding to make things look nicer text_width += 8; } S32 text_left = getRect().getWidth() - text_width; static LLUICachedControl<S32> sliderctrl_spacing ("UISliderctrlSpacing", 0); S32 slider_right = getRect().getWidth(); if( p.show_text ) { slider_right = text_left - sliderctrl_spacing; } S32 slider_left = label_width ? label_width + sliderctrl_spacing : 0; LLSlider::Params slider_p(p.slider_bar); slider_p.name("slider_bar"); slider_p.rect.setIfNotProvided(LLRect(slider_left,top,slider_right,bottom)); slider_p.initial_value.setIfNotProvided(p.initial_value().asReal()); slider_p.min_value.setIfNotProvided(p.min_value); slider_p.max_value.setIfNotProvided(p.max_value); slider_p.increment.setIfNotProvided(p.increment); slider_p.orientation.setIfNotProvided(p.orientation); slider_p.commit_callback.function(&LLSliderCtrl::onSliderCommit); slider_p.control_name(p.control_name); slider_p.mouse_down_callback( p.mouse_down_callback ); slider_p.mouse_up_callback( p.mouse_up_callback ); mSlider = LLUICtrlFactory::create<LLSlider> (slider_p); addChild( mSlider ); if( p.show_text() ) { LLRect text_rect( text_left, top, getRect().getWidth(), bottom ); if( p.can_edit_text() ) { LLLineEditor::Params line_p(p.value_editor); line_p.rect.setIfNotProvided(text_rect); line_p.font.setIfNotProvided(p.font); line_p.commit_callback.function(&LLSliderCtrl::onEditorCommit); line_p.prevalidate_callback(&LLTextValidate::validateFloat); mEditor = LLUICtrlFactory::create<LLLineEditor>(line_p); mEditor->setFocusReceivedCallback( boost::bind(&LLSliderCtrl::onEditorGainFocus, _1, this )); // don't do this, as selecting the entire text is single clicking in some cases // and double clicking in others //mEditor->setSelectAllonFocusReceived(TRUE); addChild(mEditor); } else { LLTextBox::Params text_p(p.value_text); text_p.rect.setIfNotProvided(text_rect); text_p.font.setIfNotProvided(p.font); mTextBox = LLUICtrlFactory::create<LLTextBox>(text_p); addChild(mTextBox); } } updateText(); }