From c155483fc206768e21d180fac9ccdd85db8f582e Mon Sep 17 00:00:00 2001 From: Richard Linden Date: Thu, 22 Sep 2011 17:34:42 -0700 Subject: EXP-1239 WIP make toolbars wrap when there is not enough room toolbar button height configured by button_height attribute vertical toolbar buttons now share common width wrap attribute now controls wrapping --- indra/llui/lltoolbar.cpp | 60 +++++++++++++++++++++++++++++------------------- indra/llui/lltoolbar.h | 7 ++++-- 2 files changed, 42 insertions(+), 25 deletions(-) (limited to 'indra/llui') diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp index 8ed828efd3..e10a254197 100644 --- a/indra/llui/lltoolbar.cpp +++ b/indra/llui/lltoolbar.cpp @@ -59,6 +59,7 @@ LLToolBar::Params::Params() wrap("wrap", true), min_button_width("min_button_width", 0), max_button_width("max_button_width", S32_MAX), + button_height("button_height"), background_image("background_image") {} @@ -72,6 +73,7 @@ LLToolBar::LLToolBar(const Params& p) mCenteringStack(NULL), mMinButtonWidth(p.min_button_width), mMaxButtonWidth(p.max_button_width), + mButtonHeight(p.button_height), mBackgroundImage(p.background_image) { } @@ -120,11 +122,11 @@ void LLToolBar::initFromParams(const LLToolBar::Params& p) { // remove any offset from button if (orientation == LLLayoutStack::HORIZONTAL) { - button_rect.setOriginAndSize(0, 0, mMinButtonWidth, button_rect.getHeight()); + button_rect.setOriginAndSize(0, 0, mMinButtonWidth, mButtonHeight); } else // VERTICAL { - button_rect.setOriginAndSize(0, 0, mMinButtonWidth, button_rect.getHeight()); + button_rect.setOriginAndSize(0, 0, mMinButtonWidth, mButtonHeight); } } @@ -139,19 +141,38 @@ void LLToolBar::initFromParams(const LLToolBar::Params& p) } } +void LLToolBar::resizeButtonsInRow(std::vector& buttons_in_row, S32 max_row_girth) +{ + // make buttons in current row all same girth + BOOST_FOREACH(LLToolBarButton* button, buttons_in_row) + { + if (getOrientation(mSideType) == LLLayoutStack::HORIZONTAL) + { + button->reshape(llclamp(button->getRect().getWidth(), mMinButtonWidth, mMaxButtonWidth), max_row_girth); + } + else // VERTICAL + { + button->reshape(max_row_girth, button->getRect().getHeight()); + } + } +} + void LLToolBar::updateLayoutAsNeeded() { if (!mNeedsLayout) return; LLLayoutStack::ELayoutOrientation orientation = getOrientation(mSideType); - // our terminology for orientation-agnostic layout is that + // our terminology for orientation-agnostic layout is such that // length refers to a distance in the direction we stack the buttons // and girth refers to a distance in the direction buttons wrap S32 row_running_length = 0; S32 max_length = (orientation == LLLayoutStack::HORIZONTAL) ? getRect().getWidth() : getRect().getHeight(); + S32 max_total_girth = (orientation == LLLayoutStack::HORIZONTAL) + ? getRect().getHeight() + : getRect().getWidth(); S32 max_row_girth = 0; S32 cur_start = 0; S32 cur_row = 0; @@ -170,27 +191,18 @@ void LLToolBar::updateLayoutAsNeeded() ? button->getRect().getHeight() : button_clamped_width; - // handle wrapping - if (row_running_length + button_length > max_length - && cur_start != 0) // not first button in row - { // go ahead and wrap + // wrap if needed + if (mWrap + && row_running_length + button_length > max_length // out of room... + && cur_start != 0) // ...and not first button in row + { if (orientation == LLLayoutStack::VERTICAL) - { - // row girth is clamped to allowable button widths + { // row girth (width in this case) is clamped to allowable button widths max_row_girth = llclamp(max_row_girth, mMinButtonWidth, mMaxButtonWidth); } + // make buttons in current row all same girth - BOOST_FOREACH(LLToolBarButton* button, buttons_in_row) - { - if (orientation == LLLayoutStack::HORIZONTAL) - { - button->reshape(llclamp(button->getRect().getWidth(), mMinButtonWidth, mMaxButtonWidth), max_row_girth); - } - else // VERTICAL - { - button->reshape(max_row_girth, button->getRect().getHeight()); - } - } + resizeButtonsInRow(buttons_in_row, max_row_girth); buttons_in_row.clear(); row_running_length = 0; @@ -218,9 +230,11 @@ void LLToolBar::updateLayoutAsNeeded() } // final resizing in "girth" direction - S32 total_girth = cur_row + max_row_girth; // increment by size of final row + S32 total_girth = cur_row // current row position... + + max_row_girth; // ...incremented by size of final row + resizeButtonsInRow(buttons_in_row, max_row_girth); - // grow and optionally shift toolbar to accomodate buttons + // grow and optionally shift toolbar to accommodate buttons if (orientation == LLLayoutStack::HORIZONTAL) { if (mSideType == SIDE_TOP) @@ -239,7 +253,7 @@ void LLToolBar::updateLayoutAsNeeded() reshape(total_girth, getRect().getHeight()); } - // recenter toolbar buttons + // re-center toolbar buttons mCenteringStack->updateLayout(); // don't clear flag until after we've resized ourselves, to avoid laying out every frame diff --git a/indra/llui/lltoolbar.h b/indra/llui/lltoolbar.h index 31729e32b4..83e482a946 100644 --- a/indra/llui/lltoolbar.h +++ b/indra/llui/lltoolbar.h @@ -94,7 +94,8 @@ public: Optional wrap; Optional min_button_width, - max_button_width; + max_button_width, + button_height; // get rid of this Multiple buttons; @@ -115,6 +116,7 @@ protected: private: void updateLayoutAsNeeded(); + void resizeButtonsInRow(std::vector& buttons_in_row, S32 max_row_girth); std::list mButtons; LLToolBarEnums::ButtonType mButtonType; @@ -126,7 +128,8 @@ private: bool mWrap; bool mNeedsLayout; S32 mMinButtonWidth, - mMaxButtonWidth; + mMaxButtonWidth, + mButtonHeight; LLUIImagePtr mBackgroundImage; }; -- cgit v1.3 From b6d7f99f065c87f7409a1e5e1ba1b59f3f4a3efb Mon Sep 17 00:00:00 2001 From: Richard Linden Date: Fri, 23 Sep 2011 17:01:15 -0700 Subject: EXP-1239 FIX make toolbars wrap when there is not enough room spacing between buttons now configurable and correct background art now wraps buttons correctly created customizable panel for button background --- indra/llui/lltoolbar.cpp | 235 +++++++++++---------- indra/llui/lltoolbar.h | 20 +- .../skins/default/xui/en/floater_test_toolbar.xml | 4 +- .../skins/default/xui/en/widgets/toolbar.xml | 17 +- 4 files changed, 154 insertions(+), 122 deletions(-) (limited to 'indra/llui') diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp index b2cf7e6554..3311ed4a1b 100644 --- a/indra/llui/lltoolbar.cpp +++ b/indra/llui/lltoolbar.cpp @@ -53,17 +53,40 @@ namespace LLToolBarEnums } using namespace LLToolBarEnums; + +namespace LLInitParam +{ + void TypeValues::declareValues() + { + declare("icons_only", BTNTYPE_ICONS_ONLY); + declare("icons_with_text", BTNTYPE_ICONS_WITH_TEXT); + } + + void TypeValues::declareValues() + { + declare("bottom", SIDE_BOTTOM); + declare("left", SIDE_LEFT); + declare("right", SIDE_RIGHT); + declare("top", SIDE_TOP); + } +} + LLToolBar::Params::Params() : button_display_mode("button_display_mode"), buttons("button"), - side("side"), + side("side", SIDE_TOP), button_icon("button_icon"), button_icon_and_text("button_icon_and_text"), wrap("wrap", true), min_button_width("min_button_width", 0), max_button_width("max_button_width", S32_MAX), button_height("button_height"), - background_image("background_image") + pad_left("pad_left"), + pad_top("pad_top"), + pad_right("pad_right"), + pad_bottom("pad_bottom"), + pad_between("pad_between"), + button_panel("button_panel") {} LLToolBar::LLToolBar(const Params& p) @@ -72,12 +95,16 @@ LLToolBar::LLToolBar(const Params& p) mSideType(p.side), mWrap(p.wrap), mNeedsLayout(false), - mCenterPanel(NULL), + mButtonPanel(NULL), mCenteringStack(NULL), - mMinButtonWidth(p.min_button_width), - mMaxButtonWidth(p.max_button_width), + mMinButtonWidth(llmin(p.min_button_width(), p.max_button_width())), + mMaxButtonWidth(llmax(p.max_button_width(), p.min_button_width())), mButtonHeight(p.button_height), - mBackgroundImage(p.background_image) + mPadLeft(p.pad_left), + mPadRight(p.pad_right), + mPadTop(p.pad_top), + mPadBottom(p.pad_bottom), + mPadBetween(p.pad_between) { mButtonParams[LLToolBarEnums::BTNTYPE_ICONS_ONLY] = p.button_icon; mButtonParams[LLToolBarEnums::BTNTYPE_ICONS_WITH_TEXT] = p.button_icon_and_text; @@ -110,102 +137,81 @@ void LLToolBar::initFromParams(const LLToolBar::Params& p) center_panel_p.auto_resize = false; center_panel_p.user_resize = false; center_panel_p.fit_content = true; - mCenterPanel = LLUICtrlFactory::create(center_panel_p); - mCenteringStack->addChild(mCenterPanel); + LLLayoutPanel* center_panel = LLUICtrlFactory::create(center_panel_p); + mCenteringStack->addChild(center_panel); + + LLPanel::Params button_panel_p(p.button_panel); + button_panel_p.rect = center_panel->getLocalRect(); + switch(p.side()) + { + case SIDE_LEFT: + button_panel_p.follows.flags = FOLLOWS_BOTTOM|FOLLOWS_LEFT; + break; + case SIDE_RIGHT: + button_panel_p.follows.flags = FOLLOWS_BOTTOM|FOLLOWS_RIGHT; + break; + case SIDE_TOP: + button_panel_p.follows.flags = FOLLOWS_TOP|FOLLOWS_LEFT; + break; + case SIDE_BOTTOM: + button_panel_p.follows.flags = FOLLOWS_BOTTOM|FOLLOWS_LEFT; + break; + } + mButtonPanel = LLUICtrlFactory::create(button_panel_p); + center_panel->addChild(mButtonPanel); mCenteringStack->addChild(LLUICtrlFactory::create(border_panel_p)); BOOST_FOREACH (LLToolBarButton::Params button_p, p.buttons) { - // buttons always follow left and top, for all orientations - button_p.follows.flags = FOLLOWS_LEFT|FOLLOWS_TOP; button_p.fillFrom(mButtonParams[mButtonType]); - - LLRect button_rect(button_p.rect); - { // remove any offset from button - if (orientation == LLLayoutStack::HORIZONTAL) - { - button_rect.setOriginAndSize(0, 0, mMinButtonWidth, mButtonHeight); - } - else // VERTICAL - { - button_rect.setOriginAndSize(0, 0, mMinButtonWidth, mButtonHeight); - } - } - - // use our calculated rect - button_p.rect = button_rect; LLToolBarButton* buttonp = LLUICtrlFactory::create(button_p); mButtons.push_back(buttonp); - mCenterPanel->addChild(buttonp); + mButtonPanel->addChild(buttonp); mNeedsLayout = true; } } -void LLToolBar::resizeButtonsInRow(std::vector& buttons_in_row, S32 max_row_girth) -{ - // make buttons in current row all same girth - BOOST_FOREACH(LLToolBarButton* button, buttons_in_row) - { - if (getOrientation(mSideType) == LLLayoutStack::HORIZONTAL) - { - button->reshape(llclamp(button->getRect().getWidth(), mMinButtonWidth, mMaxButtonWidth), max_row_girth); - } - else // VERTICAL - { - button->reshape(max_row_girth, button->getRect().getHeight()); - } - } -} - bool LLToolBar::addCommand(LLCommand * command) { // // Init basic toolbar button params // - - LLToolBarButton::Params button_p; - button_p.fillFrom(mButtonParams[mButtonType]); - + LLToolBarButton::Params button_p(mButtonParams[mButtonType]); button_p.name = command->name(); button_p.label = LLTrans::getString(command->labelRef()); button_p.tool_tip = LLTrans::getString(command->tooltipRef()); - // - // Set up the button rectangle - // - - S32 btn_width = mMinButtonWidth; - S32 btn_height = mButtonParams[mButtonType].rect.height; - - if ((mSideType == LLToolBarEnums::SIDE_BOTTOM) || (mSideType == LLToolBarEnums::SIDE_TOP)) - { - btn_height = getRect().getHeight(); - } - - LLRect button_rect; - button_rect.setOriginAndSize(0, 0, btn_width, btn_height); - - button_p.rect = button_rect; - // // Add it to the list of buttons // - LLToolBarButton * toolbar_button = LLUICtrlFactory::create(button_p); - - toolbar_button->reshape(llclamp(toolbar_button->getRect().getWidth(), mMinButtonWidth, mMaxButtonWidth), toolbar_button->getRect().getHeight()); - mButtons.push_back(toolbar_button); - mCenterPanel->addChild(toolbar_button); + mButtonPanel->addChild(toolbar_button); mNeedsLayout = true; return true; } +void LLToolBar::resizeButtonsInRow(std::vector& buttons_in_row, S32 max_row_girth) +{ + // make buttons in current row all same girth + BOOST_FOREACH(LLToolBarButton* button, buttons_in_row) + { + if (getOrientation(mSideType) == LLLayoutStack::HORIZONTAL) + { + button->reshape(llclamp(button->getRect().getWidth(), mMinButtonWidth, mMaxButtonWidth), max_row_girth); + } + else // VERTICAL + { + button->reshape(max_row_girth, button->getRect().getHeight()); + } + } +} + void LLToolBar::updateLayoutAsNeeded() { if (!mNeedsLayout) return; @@ -215,23 +221,51 @@ void LLToolBar::updateLayoutAsNeeded() // our terminology for orientation-agnostic layout is such that // length refers to a distance in the direction we stack the buttons // and girth refers to a distance in the direction buttons wrap - S32 row_running_length = 0; - S32 max_length = (orientation == LLLayoutStack::HORIZONTAL) - ? getRect().getWidth() - : getRect().getHeight(); - S32 max_total_girth = (orientation == LLLayoutStack::HORIZONTAL) - ? getRect().getHeight() - : getRect().getWidth(); S32 max_row_girth = 0; - S32 cur_start = 0; - S32 cur_row = 0; + S32 max_row_length = 0; - LLRect panel_rect = mCenterPanel->getLocalRect(); + S32 max_length; + S32 max_total_girth; + S32 cur_start; + S32 cur_row ; + S32 row_pad_start; + S32 row_pad_end; + S32 girth_pad_end; + S32 row_running_length; + + if (orientation == LLLayoutStack::HORIZONTAL) + { + max_length = getRect().getWidth() - mPadLeft - mPadRight; + max_total_girth = getRect().getHeight() - mPadTop - mPadBottom; + row_pad_start = mPadLeft; + row_running_length = row_pad_start; + row_pad_end = mPadRight; + cur_row = mPadTop; + girth_pad_end = mPadBottom; + } + else // VERTICAL + { + max_length = getRect().getHeight() - mPadTop - mPadBottom; + max_total_girth = getRect().getWidth() - mPadLeft - mPadRight; + row_pad_start = mPadTop; + row_running_length = row_pad_start; + row_pad_end = mPadBottom; + cur_row = mPadLeft; + girth_pad_end = mPadRight; + } + + cur_start = row_pad_start; + + + LLRect panel_rect = mButtonPanel->getLocalRect(); std::vector buttons_in_row; BOOST_FOREACH(LLToolBarButton* button, mButtons) { + button->reshape(mMinButtonWidth, mButtonHeight); + button->autoResize(); + S32 button_clamped_width = llclamp(button->getRect().getWidth(), mMinButtonWidth, mMaxButtonWidth); S32 button_length = (orientation == LLLayoutStack::HORIZONTAL) ? button_clamped_width @@ -254,9 +288,10 @@ void LLToolBar::updateLayoutAsNeeded() resizeButtonsInRow(buttons_in_row, max_row_girth); buttons_in_row.clear(); - row_running_length = 0; - cur_start = 0; - cur_row += max_row_girth; + max_row_length = llmax(max_row_length, row_running_length); + row_running_length = row_pad_start; + cur_start = row_pad_start; + cur_row += max_row_girth + mPadBetween; max_row_girth = 0; } @@ -273,14 +308,17 @@ void LLToolBar::updateLayoutAsNeeded() buttons_in_row.push_back(button); - row_running_length += button_length; + row_running_length += button_length + mPadBetween; cur_start = row_running_length; max_row_girth = llmax(button_girth, max_row_girth); } // final resizing in "girth" direction S32 total_girth = cur_row // current row position... - + max_row_girth; // ...incremented by size of final row + + max_row_girth // ...incremented by size of final row... + + girth_pad_end; // ...plus padding reserved on end + max_row_length = llmax(max_row_length, row_running_length - mPadBetween + row_pad_end); + resizeButtonsInRow(buttons_in_row, max_row_girth); // grow and optionally shift toolbar to accommodate buttons @@ -288,18 +326,18 @@ void LLToolBar::updateLayoutAsNeeded() { if (mSideType == SIDE_TOP) { // shift down to maintain top edge - translate(0, getRect().getHeight() - total_girth); + mButtonPanel->translate(0, mButtonPanel->getRect().getHeight() - total_girth); } - reshape(getRect().getWidth(), total_girth); + mButtonPanel->reshape(max_row_length, total_girth); } else // VERTICAL { if (mSideType == SIDE_RIGHT) { // shift left to maintain right edge - translate(getRect().getWidth() - total_girth, 0); + mButtonPanel->translate(mButtonPanel->getRect().getWidth() - total_girth, 0); } - reshape(total_girth, getRect().getHeight()); + mButtonPanel->reshape(total_girth, max_row_length); } // re-center toolbar buttons @@ -313,12 +351,6 @@ void LLToolBar::updateLayoutAsNeeded() void LLToolBar::draw() { updateLayoutAsNeeded(); - - { // draw background - LLRect bg_rect; - localRectToOtherView(mCenterPanel->getRect(),&bg_rect, this); - mBackgroundImage->draw(bg_rect); - } LLUICtrl::draw(); } @@ -328,20 +360,3 @@ void LLToolBar::reshape(S32 width, S32 height, BOOL called_from_parent) mNeedsLayout = true; } -namespace LLInitParam -{ - void TypeValues::declareValues() - { - declare("icons_only", BTNTYPE_ICONS_ONLY); - declare("icons_with_text", BTNTYPE_ICONS_WITH_TEXT); - } - - void TypeValues::declareValues() - { - declare("none", SIDE_NONE); - declare("bottom", SIDE_BOTTOM); - declare("left", SIDE_LEFT); - declare("right", SIDE_RIGHT); - declare("top", SIDE_TOP); - } -} diff --git a/indra/llui/lltoolbar.h b/indra/llui/lltoolbar.h index 9b08b26ce4..92c289cd3f 100644 --- a/indra/llui/lltoolbar.h +++ b/indra/llui/lltoolbar.h @@ -59,7 +59,6 @@ namespace LLToolBarEnums enum SideType { - SIDE_NONE = 0, SIDE_BOTTOM, SIDE_LEFT, SIDE_RIGHT, @@ -101,10 +100,16 @@ public: Optional min_button_width, max_button_width, button_height; + + Optional pad_left, + pad_top, + pad_right, + pad_bottom, + pad_between; // get rid of this Multiple buttons; - Optional background_image; + Optional button_panel; Params(); }; @@ -129,16 +134,19 @@ private: LLToolBarEnums::ButtonType mButtonType; LLLayoutStack* mCenteringStack; LLLayoutStack* mWrapStack; - LLLayoutPanel* mCenterPanel; + LLPanel* mButtonPanel; LLToolBarEnums::SideType mSideType; bool mWrap; bool mNeedsLayout; S32 mMinButtonWidth, mMaxButtonWidth, - mButtonHeight; - - LLUIImagePtr mBackgroundImage; + mButtonHeight, + mPadLeft, + mPadRight, + mPadTop, + mPadBottom, + mPadBetween; LLToolBarButton::Params mButtonParams[LLToolBarEnums::BTNTYPE_COUNT]; }; diff --git a/indra/newview/skins/default/xui/en/floater_test_toolbar.xml b/indra/newview/skins/default/xui/en/floater_test_toolbar.xml index da964b88e2..b58c006b3f 100644 --- a/indra/newview/skins/default/xui/en/floater_test_toolbar.xml +++ b/indra/newview/skins/default/xui/en/floater_test_toolbar.xml @@ -28,7 +28,7 @@ diff --git a/indra/newview/skins/default/xui/en/widgets/toolbar.xml b/indra/newview/skins/default/xui/en/widgets/toolbar.xml index f9cc9b7c69..45210277b2 100644 --- a/indra/newview/skins/default/xui/en/widgets/toolbar.xml +++ b/indra/newview/skins/default/xui/en/widgets/toolbar.xml @@ -1,11 +1,20 @@ - - + + + - -- cgit v1.3 From c27d6ee5aa8428cf82486264779f266b9a2fb00a Mon Sep 17 00:00:00 2001 From: Richard Linden Date: Fri, 23 Sep 2011 17:19:38 -0700 Subject: EXP-1239 FIX make toolbars wrap when there is not enough room fixed overeager wrapping --- indra/llui/lltoolbar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/llui') diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp index 3311ed4a1b..e5ffe391a6 100644 --- a/indra/llui/lltoolbar.cpp +++ b/indra/llui/lltoolbar.cpp @@ -277,7 +277,7 @@ void LLToolBar::updateLayoutAsNeeded() // wrap if needed if (mWrap && row_running_length + button_length > max_length // out of room... - && cur_start != 0) // ...and not first button in row + && cur_start != row_pad_start) // ...and not first button in row { if (orientation == LLLayoutStack::VERTICAL) { // row girth (width in this case) is clamped to allowable button widths -- cgit v1.3 From 105b15436d37149f6df71866125871448ee4fbcb Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Fri, 23 Sep 2011 19:24:55 -0700 Subject: EXP-1027 : Fix the children creation code in LLToolBarView. Only a left panel is displayed now. --- indra/llui/lltoolbar.cpp | 2 +- indra/llui/lltoolbarview.cpp | 8 ++++---- indra/llui/lltoolbarview.h | 3 +++ indra/llui/llui.cpp | 1 + indra/newview/llviewerwindow.cpp | 2 +- indra/newview/skins/default/xui/en/panel_toolbar_view.xml | 4 +++- 6 files changed, 13 insertions(+), 7 deletions(-) (limited to 'indra/llui') diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp index e052c1c876..ac07e6dd0b 100644 --- a/indra/llui/lltoolbar.cpp +++ b/indra/llui/lltoolbar.cpp @@ -33,7 +33,7 @@ #include "llcommandmanager.h" #include "lltrans.h" -static LLDefaultChildRegistry::Register r1("toolbar"); +//static LLDefaultChildRegistry::Register r1("toolbar"); namespace LLToolBarEnums { diff --git a/indra/llui/lltoolbarview.cpp b/indra/llui/lltoolbarview.cpp index 590cd4ffca..c99b573b35 100644 --- a/indra/llui/lltoolbarview.cpp +++ b/indra/llui/lltoolbarview.cpp @@ -84,10 +84,10 @@ void LLToolBarView::draw() // Debug draw LLColor4 back_color = LLColor4::blue; back_color[VALPHA] = 0.5f; -// gl_rect_2d(getLocalRect(), back_color, TRUE); -// gl_rect_2d(bottom_rect, LLColor4::red, TRUE); -// gl_rect_2d(left_rect, LLColor4::green, TRUE); -// gl_rect_2d(right_rect, LLColor4::yellow, TRUE); + //gl_rect_2d(getLocalRect(), back_color, TRUE); + //gl_rect_2d(bottom_rect, LLColor4::red, TRUE); + //gl_rect_2d(left_rect, LLColor4::green, TRUE); + //gl_rect_2d(right_rect, LLColor4::yellow, TRUE); LLUICtrl::draw(); } diff --git a/indra/llui/lltoolbarview.h b/indra/llui/lltoolbarview.h index 73278e226b..0e6545015d 100644 --- a/indra/llui/lltoolbarview.h +++ b/indra/llui/lltoolbarview.h @@ -41,6 +41,9 @@ public: virtual ~LLToolBarView(); virtual void draw(); + // valid children for LLToolBarView are stored in this registry + typedef LLDefaultChildRegistry child_registry_t; + protected: friend class LLUICtrlFactory; LLToolBarView(const Params&); diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp index a4303780fd..4f129ccfba 100644 --- a/indra/llui/llui.cpp +++ b/indra/llui/llui.cpp @@ -96,6 +96,7 @@ static LLDefaultChildRegistry::Register register_search_editor(" // register other widgets which otherwise may not be linked in static LLDefaultChildRegistry::Register register_loading_indicator("loading_indicator"); +static LLDefaultChildRegistry::Register register_toolbar("toolbar"); // // Functions diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index e851398bf5..c651e86606 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -1786,7 +1786,7 @@ void LLViewerWindow::initBase() // Get a pointer to the toolbar view holder LLPanel* panel_holder = main_view->getChild("toolbar_view_holder"); // Load the toolbar view from file - gToolBarView = LLUICtrlFactory::getInstance()->createFromFile("panel_toolbar_view.xml", panel_holder, LLPanel::child_registry_t::instance()); + gToolBarView = LLUICtrlFactory::getInstance()->createFromFile("panel_toolbar_view.xml", panel_holder, LLDefaultChildRegistry::instance()); // Attach it to the toolbar view holder //panel_holder->addChild(gToolBarView); } diff --git a/indra/newview/skins/default/xui/en/panel_toolbar_view.xml b/indra/newview/skins/default/xui/en/panel_toolbar_view.xml index 33a19bcdb0..12c442d8f1 100644 --- a/indra/newview/skins/default/xui/en/panel_toolbar_view.xml +++ b/indra/newview/skins/default/xui/en/panel_toolbar_view.xml @@ -5,6 +5,8 @@ name="toolbar view" height="500" width="1024" + left="0" + top="0" mouse_opaque="false" tab_stop="false" visible="true"> @@ -39,7 +41,7 @@ side="right" visible="true" /> Date: Mon, 26 Sep 2011 14:34:42 -0700 Subject: EXP-1205 PROGRESS -- As a User, I want a toybox which will contain all buttons that I can d&d into the toolbars EXP-1233 PROGRESS -- Populate the toybox floater window with all FUI toolbar buttons EXP-1235 FIX -- Make the toybox available through the context menus associated with the other toolbars EXP-1248 FIX -- Implement context menu on toolbars * New commands are listed * Toolbars can now be made read-only (as in the toybox) or editable (as in the others) * Toolbars that are not read-only have a context menu that allows button type editing. Reviewed by Richard. --- indra/llui/lltoolbar.cpp | 113 +++++++++++++++++++-- indra/llui/lltoolbar.h | 18 +++- indra/newview/app_settings/commands.xml | 9 ++ indra/newview/skins/default/textures/textures.xml | 1 + .../skins/default/xui/en/floater_toybox.xml | 4 +- .../newview/skins/default/xui/en/menu_toolbars.xml | 29 ++++++ indra/newview/skins/default/xui/en/strings.xml | 2 + .../skins/default/xui/en/widgets/toolbar.xml | 3 +- 8 files changed, 166 insertions(+), 13 deletions(-) create mode 100644 indra/newview/skins/default/xui/en/menu_toolbars.xml (limited to 'indra/llui') diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp index 31a18dc707..a9513b759a 100644 --- a/indra/llui/lltoolbar.cpp +++ b/indra/llui/lltoolbar.cpp @@ -31,6 +31,7 @@ #include "lltoolbar.h" #include "llcommandmanager.h" +#include "llmenugl.h" #include "lltrans.h" // uncomment this and remove the one in llui.cpp when there is an external reference to this translation unit @@ -51,6 +52,7 @@ namespace LLToolBarEnums return orientation; } } + using namespace LLToolBarEnums; @@ -58,8 +60,8 @@ namespace LLInitParam { void TypeValues::declareValues() { - declare("icons_only", BTNTYPE_ICONS_ONLY); declare("icons_with_text", BTNTYPE_ICONS_WITH_TEXT); + declare("icons_only", BTNTYPE_ICONS_ONLY); } void TypeValues::declareValues() @@ -77,6 +79,7 @@ LLToolBar::Params::Params() side("side", SIDE_TOP), button_icon("button_icon"), button_icon_and_text("button_icon_and_text"), + read_only("read_only", false), wrap("wrap", true), min_button_width("min_button_width", 0), max_button_width("max_button_width", S32_MAX), @@ -91,6 +94,7 @@ LLToolBar::Params::Params() LLToolBar::LLToolBar(const LLToolBar::Params& p) : LLUICtrl(p), + mReadOnly(p.read_only), mButtonType(p.button_display_mode), mSideType(p.side), mWrap(p.wrap), @@ -104,10 +108,47 @@ LLToolBar::LLToolBar(const LLToolBar::Params& p) mPadRight(p.pad_right), mPadTop(p.pad_top), mPadBottom(p.pad_bottom), - mPadBetween(p.pad_between) + mPadBetween(p.pad_between), + mPopupMenuHandle() { - mButtonParams[LLToolBarEnums::BTNTYPE_ICONS_ONLY] = p.button_icon; mButtonParams[LLToolBarEnums::BTNTYPE_ICONS_WITH_TEXT] = p.button_icon_and_text; + mButtonParams[LLToolBarEnums::BTNTYPE_ICONS_ONLY] = p.button_icon; +} + +LLToolBar::~LLToolBar() +{ + LLView::deleteViewByHandle(mPopupMenuHandle); +} + +BOOL LLToolBar::postBuild() +{ + if (!mReadOnly) + { + LLUICtrl::CommitCallbackRegistry::Registrar& commit_reg = LLUICtrl::CommitCallbackRegistry::defaultRegistrar(); + commit_reg.add("Toolbars.EnableSetting", boost::bind(&LLToolBar::onSettingEnable, this, _2)); + + LLUICtrl::EnableCallbackRegistry::Registrar& enable_reg = LLUICtrl::EnableCallbackRegistry::defaultRegistrar(); + enable_reg.add("Toolbars.CheckSetting", boost::bind(&LLToolBar::isSettingChecked, this, _2)); + + // + // Setup the context menu + // + + LLMenuGL* menu = LLUICtrlFactory::instance().createFromFile("menu_toolbars.xml", LLMenuGL::sMenuContainer, LLMenuHolderGL::child_registry_t::instance()); + + if (menu) + { + menu->setBackgroundColor(LLUIColorTable::instance().getColor("MenuPopupBgColor")); + + mPopupMenuHandle = menu->getHandle(); + } + else + { + llwarns << "Unable to load toolbars context menu." << llendl; + } + } + + return TRUE; } void LLToolBar::initFromParams(const LLToolBar::Params& p) @@ -199,6 +240,61 @@ bool LLToolBar::addCommand(LLCommand * command) return true; } +BOOL LLToolBar::handleRightMouseDown(S32 x, S32 y, MASK mask) +{ + BOOL handle_it_here = !mReadOnly; + + if (handle_it_here) + { + LLMenuGL * menu = (LLMenuGL *) mPopupMenuHandle.get(); + + if (menu) + { + LLMenuGL::showPopup(this, menu, x, y); + } + } + + return handle_it_here; +} + +BOOL LLToolBar::isSettingChecked(const LLSD& userdata) +{ + BOOL retval = FALSE; + + const std::string setting_name = userdata.asString(); + + if (setting_name == "icons_and_labels") + { + retval = (mButtonType == BTNTYPE_ICONS_WITH_TEXT); + } + else if (setting_name == "icons_only") + { + retval = (mButtonType == BTNTYPE_ICONS_ONLY); + } + + return retval; +} + +void LLToolBar::onSettingEnable(const LLSD& userdata) +{ + llassert(!mReadOnly); + + const std::string setting_name = userdata.asString(); + + const ButtonType current_button_type = mButtonType; + + if (setting_name == "icons_and_labels") + { + mButtonType = BTNTYPE_ICONS_WITH_TEXT; + } + else if (setting_name == "icons_only") + { + mButtonType = BTNTYPE_ICONS_ONLY; + } + + mNeedsLayout |= (current_button_type != mButtonType); +} + void LLToolBar::resizeButtonsInRow(std::vector& buttons_in_row, S32 max_row_girth) { // make buttons in current row all same girth @@ -264,8 +360,8 @@ void LLToolBar::updateLayoutAsNeeded() std::vector buttons_in_row; - BOOST_FOREACH(LLToolBarButton* button, mButtons) - { + BOOST_FOREACH(LLToolBarButton* button, mButtons) + { button->reshape(mMinButtonWidth, mButtonHeight); button->autoResize(); @@ -296,11 +392,11 @@ void LLToolBar::updateLayoutAsNeeded() cur_start = row_pad_start; cur_row += max_row_girth + mPadBetween; max_row_girth = 0; - } + } LLRect button_rect; if (orientation == LLLayoutStack::HORIZONTAL) - { + { button_rect.setLeftTopAndSize(cur_start, panel_rect.mTop - cur_row, button_clamped_width, button->getRect().getHeight()); } else // VERTICAL @@ -340,8 +436,9 @@ void LLToolBar::updateLayoutAsNeeded() { // shift left to maintain right edge mButtonPanel->translate(mButtonPanel->getRect().getWidth() - total_girth, 0); } + mButtonPanel->reshape(total_girth, max_row_length); - } + } // re-center toolbar buttons mCenteringStack->updateLayout(); diff --git a/indra/llui/lltoolbar.h b/indra/llui/lltoolbar.h index 92c289cd3f..5028c39fb8 100644 --- a/indra/llui/lltoolbar.h +++ b/indra/llui/lltoolbar.h @@ -51,8 +51,8 @@ namespace LLToolBarEnums { enum ButtonType { - BTNTYPE_ICONS_ONLY = 0, - BTNTYPE_ICONS_WITH_TEXT, + BTNTYPE_ICONS_WITH_TEXT = 0, + BTNTYPE_ICONS_ONLY, BTNTYPE_COUNT }; @@ -96,7 +96,9 @@ public: Optional button_icon, button_icon_and_text; - Optional wrap; + Optional read_only, + wrap; + Optional min_button_width, max_button_width, button_height; @@ -116,6 +118,7 @@ public: // virtuals void draw(); + BOOL postBuild(); void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE); bool addCommand(LLCommand * command); @@ -123,13 +126,20 @@ public: protected: friend class LLUICtrlFactory; LLToolBar(const Params&); + ~LLToolBar(); void initFromParams(const Params&); + BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); + BOOL isSettingChecked(const LLSD& userdata); + void onSettingEnable(const LLSD& userdata); + private: void updateLayoutAsNeeded(); void resizeButtonsInRow(std::vector& buttons_in_row, S32 max_row_girth); + const bool mReadOnly; + std::list mButtons; LLToolBarEnums::ButtonType mButtonType; LLLayoutStack* mCenteringStack; @@ -149,6 +159,8 @@ private: mPadBetween; LLToolBarButton::Params mButtonParams[LLToolBarEnums::BTNTYPE_COUNT]; + + LLHandle mPopupMenuHandle; }; diff --git a/indra/newview/app_settings/commands.xml b/indra/newview/app_settings/commands.xml index 5cb8ddffcd..dbb0e8b7ca 100644 --- a/indra/newview/app_settings/commands.xml +++ b/indra/newview/app_settings/commands.xml @@ -21,6 +21,7 @@ function="Floater.ToolbarToggle" param="chat" /> + + + diff --git a/indra/newview/skins/default/xui/en/floater_toybox.xml b/indra/newview/skins/default/xui/en/floater_toybox.xml index 5f3a59d964..1c9f20c496 100644 --- a/indra/newview/skins/default/xui/en/floater_toybox.xml +++ b/indra/newview/skins/default/xui/en/floater_toybox.xml @@ -45,10 +45,12 @@ diff --git a/indra/newview/skins/default/xui/en/menu_toolbars.xml b/indra/newview/skins/default/xui/en/menu_toolbars.xml new file mode 100644 index 0000000000..b3ecd3dcb6 --- /dev/null +++ b/indra/newview/skins/default/xui/en/menu_toolbars.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index d4c2bc50ca..feea555fdc 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -3668,6 +3668,8 @@ Try enclosing path to the editor with double quotes. Map + Mini Map + Move My Land diff --git a/indra/newview/skins/default/xui/en/widgets/toolbar.xml b/indra/newview/skins/default/xui/en/widgets/toolbar.xml index 45210277b2..7346e5ce2d 100644 --- a/indra/newview/skins/default/xui/en/widgets/toolbar.xml +++ b/indra/newview/skins/default/xui/en/widgets/toolbar.xml @@ -4,7 +4,8 @@ pad_right="5" pad_top="5" pad_bottom="5" - pad_between="5"> + pad_between="5" + read_only="false"> Date: Mon, 26 Sep 2011 15:19:04 -0700 Subject: EXP-1207 : Display toolbars only after login, use correct position (temporary), follow resize correctly, store pointers to toolbars, debug display (temporary) --- indra/llui/lltoolbarview.cpp | 35 +++++++++++++------ indra/llui/lltoolbarview.h | 8 ++++- indra/newview/app_settings/settings.xml | 2 +- indra/newview/llviewerwindow.cpp | 12 +++++-- .../skins/default/xui/en/panel_toolbar_view.xml | 40 +++++++++++----------- 5 files changed, 62 insertions(+), 35 deletions(-) (limited to 'indra/llui') diff --git a/indra/llui/lltoolbarview.cpp b/indra/llui/lltoolbarview.cpp index c99b573b35..0b0fcef52c 100644 --- a/indra/llui/lltoolbarview.cpp +++ b/indra/llui/lltoolbarview.cpp @@ -37,7 +37,10 @@ LLToolBarView* gToolBarView = NULL; static LLDefaultChildRegistry::Register r("toolbar_view"); LLToolBarView::LLToolBarView(const LLToolBarView::Params& p) -: LLUICtrl(p) +: LLUICtrl(p), + mToolbarLeft(NULL), + mToolbarRight(NULL), + mToolbarBottom(NULL) { } @@ -51,20 +54,28 @@ LLToolBarView::~LLToolBarView() { } +BOOL LLToolBarView::postBuild() +{ + mToolbarLeft = getChild("toolbar_left"); + mToolbarRight = getChild("toolbar_right"); + mToolbarBottom = getChild("toolbar_bottom"); + return TRUE; +} + void LLToolBarView::draw() { static bool debug_print = true; static S32 old_width = 0; static S32 old_height = 0; - LLToolBar* toolbar_bottom = getChild("toolbar_bottom"); - LLToolBar* toolbar_left = getChild("toolbar_left"); - LLToolBar* toolbar_right = getChild("toolbar_right"); LLPanel* sizer_left = getChild("sizer_left"); - LLRect bottom_rect = toolbar_bottom->getRect(); - LLRect left_rect = toolbar_left->getRect(); - LLRect right_rect = toolbar_right->getRect(); + LLRect bottom_rect, left_rect, right_rect; + + if (mToolbarBottom) bottom_rect = mToolbarBottom->getRect(); + if (mToolbarLeft) left_rect = mToolbarLeft->getRect(); + if (mToolbarRight) right_rect = mToolbarRight->getRect(); + LLRect sizer_left_rect = sizer_left->getRect(); if ((old_width != getRect().getWidth()) || (old_height != getRect().getHeight())) @@ -83,11 +94,15 @@ void LLToolBarView::draw() } // Debug draw LLColor4 back_color = LLColor4::blue; + LLColor4 back_color_vert = LLColor4::red; + LLColor4 back_color_hori = LLColor4::yellow; back_color[VALPHA] = 0.5f; + back_color_hori[VALPHA] = 0.5f; + back_color_vert[VALPHA] = 0.5f; //gl_rect_2d(getLocalRect(), back_color, TRUE); - //gl_rect_2d(bottom_rect, LLColor4::red, TRUE); - //gl_rect_2d(left_rect, LLColor4::green, TRUE); - //gl_rect_2d(right_rect, LLColor4::yellow, TRUE); + gl_rect_2d(bottom_rect, back_color_hori, TRUE); + gl_rect_2d(left_rect, back_color_vert, TRUE); + gl_rect_2d(right_rect, back_color_vert, TRUE); LLUICtrl::draw(); } diff --git a/indra/llui/lltoolbarview.h b/indra/llui/lltoolbarview.h index 0e6545015d..24735d69e9 100644 --- a/indra/llui/lltoolbarview.h +++ b/indra/llui/lltoolbarview.h @@ -29,6 +29,7 @@ #define LL_LLTOOLBARVIEW_H #include "lluictrl.h" +#include "lltoolbar.h" class LLUICtrlFactory; @@ -38,7 +39,10 @@ class LLToolBarView : public LLUICtrl { public: struct Params : public LLInitParam::Block {}; + virtual ~LLToolBarView(); + /*virtual*/ BOOL postBuild(); + virtual void draw(); // valid children for LLToolBarView are stored in this registry @@ -51,7 +55,9 @@ protected: void initFromParams(const Params&); private: - LLHandle mSnapView; + LLToolBar* mToolbarLeft; + LLToolBar* mToolbarRight; + LLToolBar* mToolbarBottom; }; extern LLToolBarView* gToolBarView; diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index f1db72e5cc..9a06423422 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -1858,7 +1858,7 @@ Type Boolean Value - 1 + 0 Cursor3D diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 947f0ec184..34ee893594 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -1779,7 +1779,7 @@ void LLViewerWindow::initBase() mHintHolder = main_view->getChild("hint_holder")->getHandle(); mLoginPanelHolder = main_view->getChild("login_panel_holder")->getHandle(); - // Update the toolbar global holder + // Create the toolbar view // *TODO: Eventually, suppress the existence of this debug setting and turn toolbar FUI on permanently if (gSavedSettings.getBOOL("DebugToolbarFUI")) { @@ -1787,8 +1787,8 @@ void LLViewerWindow::initBase() LLPanel* panel_holder = main_view->getChild("toolbar_view_holder"); // Load the toolbar view from file gToolBarView = LLUICtrlFactory::getInstance()->createFromFile("panel_toolbar_view.xml", panel_holder, LLDefaultChildRegistry::instance()); - // Attach it to the toolbar view holder - //panel_holder->addChild(gToolBarView); + // Hide the toolbars for the moment: we'll make them visible after logging in world (see LLViewerWindow::initWorldUI()) + gToolBarView->setVisible(FALSE); } // Constrain floaters to inside the menu and status bar regions. @@ -1953,6 +1953,12 @@ void LLViewerWindow::initWorldUI() buttons_panel->setShape(buttons_panel_container->getLocalRect()); buttons_panel->setFollowsAll(); buttons_panel_container->addChild(buttons_panel); + + // Make the toolbars visible + if (gToolBarView) + { + gToolBarView->setVisible(TRUE); + } } // Destroy the UI diff --git a/indra/newview/skins/default/xui/en/panel_toolbar_view.xml b/indra/newview/skins/default/xui/en/panel_toolbar_view.xml index 6701266887..7503da1d36 100644 --- a/indra/newview/skins/default/xui/en/panel_toolbar_view.xml +++ b/indra/newview/skins/default/xui/en/panel_toolbar_view.xml @@ -3,18 +3,32 @@ follows="all" layout="topleft" name="toolbar view" - height="500" + height="716" width="1024" left="0" top="0" mouse_opaque="false" tab_stop="false" visible="true"> + @@ -36,25 +50,11 @@ follows="top|bottom|right" layout="topleft" name="toolbar_right" - height="500" + height="686" width="30" left="994" top="0" side="right" button_display_mode="icons_only" visible="true" /> - -- cgit v1.3 From bb1776de6865715b2dd96185140d35e46d63c837 Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Mon, 26 Sep 2011 16:06:57 -0700 Subject: EXP-1207 : Introduced an hasCommand() method for toolbars and toolbar view --- indra/llui/lltoolbar.cpp | 14 ++++++++++++++ indra/llui/lltoolbar.h | 1 + indra/llui/lltoolbarview.cpp | 18 ++++++++++++++++++ indra/llui/lltoolbarview.h | 2 ++ 4 files changed, 35 insertions(+) (limited to 'indra/llui') diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp index a9513b759a..5802d2adda 100644 --- a/indra/llui/lltoolbar.cpp +++ b/indra/llui/lltoolbar.cpp @@ -240,6 +240,20 @@ bool LLToolBar::addCommand(LLCommand * command) return true; } +bool LLToolBar::hasCommand(const std::string& command_name) +{ + bool has_command = false; + for (std::list::iterator cmd = mButtons.begin(); cmd != mButtons.end(); cmd++) + { + if ((*cmd)->getName() == command_name) + { + has_command = true; + break; + } + } + return has_command; +} + BOOL LLToolBar::handleRightMouseDown(S32 x, S32 y, MASK mask) { BOOL handle_it_here = !mReadOnly; diff --git a/indra/llui/lltoolbar.h b/indra/llui/lltoolbar.h index 5028c39fb8..00e6ed131a 100644 --- a/indra/llui/lltoolbar.h +++ b/indra/llui/lltoolbar.h @@ -122,6 +122,7 @@ public: void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE); bool addCommand(LLCommand * command); + bool hasCommand(const std::string& command_name); protected: friend class LLUICtrlFactory; diff --git a/indra/llui/lltoolbarview.cpp b/indra/llui/lltoolbarview.cpp index 0b0fcef52c..3b4960fdd5 100644 --- a/indra/llui/lltoolbarview.cpp +++ b/indra/llui/lltoolbarview.cpp @@ -62,6 +62,24 @@ BOOL LLToolBarView::postBuild() return TRUE; } +bool LLToolBarView::hasCommand(const std::string& command_name) +{ + bool has_command = false; + if (mToolbarLeft && !has_command) + { + has_command = mToolbarLeft->hasCommand(command_name); + } + if (mToolbarRight && !has_command) + { + has_command = mToolbarRight->hasCommand(command_name); + } + if (mToolbarBottom && !has_command) + { + has_command = mToolbarBottom->hasCommand(command_name); + } + return has_command; +} + void LLToolBarView::draw() { static bool debug_print = true; diff --git a/indra/llui/lltoolbarview.h b/indra/llui/lltoolbarview.h index 24735d69e9..65d339315b 100644 --- a/indra/llui/lltoolbarview.h +++ b/indra/llui/lltoolbarview.h @@ -45,6 +45,8 @@ public: virtual void draw(); + bool hasCommand(const std::string& command_name); + // valid children for LLToolBarView are stored in this registry typedef LLDefaultChildRegistry child_registry_t; -- cgit v1.3 From a465f816b8e7674aa3f22023d7708106ca35b350 Mon Sep 17 00:00:00 2001 From: Richard Nelson Date: Mon, 26 Sep 2011 17:36:07 -0700 Subject: EXP-1239 FIX make toolbars wrap when there is not enough room toolbars resize to fit buttons toolbar view uses layout stacks to organize toolbars reviewed by Leslie --- indra/llui/llcommandmanager.cpp | 2 +- indra/llui/lldockcontrol.cpp | 3 +- indra/llui/lltoolbar.cpp | 27 ++-- indra/llui/lltoolbarview.cpp | 3 - indra/newview/llviewerwindow.cpp | 1 + .../skins/default/xui/en/panel_toolbar_view.xml | 146 ++++++++++++++------- .../skins/default/xui/en/widgets/toolbar.xml | 3 +- 7 files changed, 114 insertions(+), 71 deletions(-) (limited to 'indra/llui') diff --git a/indra/llui/llcommandmanager.cpp b/indra/llui/llcommandmanager.cpp index 6be616b980..071ab24cda 100644 --- a/indra/llui/llcommandmanager.cpp +++ b/indra/llui/llcommandmanager.cpp @@ -109,7 +109,7 @@ void LLCommandManager::addCommand(LLCommand * command) mCommandIndices[command->name()] = mCommands.size(); mCommands.push_back(command); - llinfos << "Successfully added command: " << command->name() << llendl; + lldebugs << "Successfully added command: " << command->name() << llendl; } //static diff --git a/indra/llui/lldockcontrol.cpp b/indra/llui/lldockcontrol.cpp index b1c27126d9..6e39fcd714 100644 --- a/indra/llui/lldockcontrol.cpp +++ b/indra/llui/lldockcontrol.cpp @@ -97,6 +97,7 @@ void LLDockControl::getAllowedRect(LLRect& rect) void LLDockControl::repositionDockable() { + if (!mDockWidget) return; LLRect dockRect = mDockWidget->calcScreenRect(); LLRect rootRect; mGetAllowedRectCallback(rootRect); @@ -160,7 +161,7 @@ bool LLDockControl::isDockVisible() case TOP: { // check is dock inside parent rect - // assume that parent for all dockable flaoters + // assume that parent for all dockable floaters // is the root view LLRect dockParentRect = mDockWidget->getRootView()->calcScreenRect(); diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp index 31a18dc707..90ade136e8 100644 --- a/indra/llui/lltoolbar.cpp +++ b/indra/llui/lltoolbar.cpp @@ -122,6 +122,7 @@ void LLToolBar::initFromParams(const LLToolBar::Params& p) centering_stack_p.rect = getLocalRect(); centering_stack_p.follows.flags = FOLLOWS_ALL; centering_stack_p.orientation = orientation; + centering_stack_p.mouse_opaque = false; mCenteringStack = LLUICtrlFactory::create(centering_stack_p); addChild(mCenteringStack); @@ -131,6 +132,7 @@ void LLToolBar::initFromParams(const LLToolBar::Params& p) border_panel_p.rect = getLocalRect(); border_panel_p.auto_resize = true; border_panel_p.user_resize = false; + border_panel_p.mouse_opaque = false; mCenteringStack->addChild(LLUICtrlFactory::create(border_panel_p)); @@ -145,21 +147,7 @@ void LLToolBar::initFromParams(const LLToolBar::Params& p) LLPanel::Params button_panel_p(p.button_panel); button_panel_p.rect = center_panel->getLocalRect(); - switch(p.side()) - { - case SIDE_LEFT: - button_panel_p.follows.flags = FOLLOWS_BOTTOM|FOLLOWS_LEFT; - break; - case SIDE_RIGHT: - button_panel_p.follows.flags = FOLLOWS_BOTTOM|FOLLOWS_RIGHT; - break; - case SIDE_TOP: - button_panel_p.follows.flags = FOLLOWS_TOP|FOLLOWS_LEFT; - break; - case SIDE_BOTTOM: - button_panel_p.follows.flags = FOLLOWS_BOTTOM|FOLLOWS_LEFT; - break; - } + button_panel_p.follows.flags = FOLLOWS_BOTTOM|FOLLOWS_LEFT; mButtonPanel = LLUICtrlFactory::create(button_panel_p); center_panel->addChild(mButtonPanel); @@ -329,19 +317,22 @@ void LLToolBar::updateLayoutAsNeeded() { if (mSideType == SIDE_TOP) { // shift down to maintain top edge - mButtonPanel->translate(0, mButtonPanel->getRect().getHeight() - total_girth); + translate(0, getRect().getHeight() - total_girth); } + reshape(getRect().getWidth(), total_girth); mButtonPanel->reshape(max_row_length, total_girth); } else // VERTICAL { if (mSideType == SIDE_RIGHT) { // shift left to maintain right edge - mButtonPanel->translate(mButtonPanel->getRect().getWidth() - total_girth, 0); + translate(getRect().getWidth() - total_girth, 0); } + + reshape(total_girth, getRect().getHeight()); mButtonPanel->reshape(total_girth, max_row_length); - } + } // re-center toolbar buttons mCenteringStack->updateLayout(); diff --git a/indra/llui/lltoolbarview.cpp b/indra/llui/lltoolbarview.cpp index c99b573b35..27d67184d8 100644 --- a/indra/llui/lltoolbarview.cpp +++ b/indra/llui/lltoolbarview.cpp @@ -60,12 +60,10 @@ void LLToolBarView::draw() LLToolBar* toolbar_bottom = getChild("toolbar_bottom"); LLToolBar* toolbar_left = getChild("toolbar_left"); LLToolBar* toolbar_right = getChild("toolbar_right"); - LLPanel* sizer_left = getChild("sizer_left"); LLRect bottom_rect = toolbar_bottom->getRect(); LLRect left_rect = toolbar_left->getRect(); LLRect right_rect = toolbar_right->getRect(); - LLRect sizer_left_rect = sizer_left->getRect(); if ((old_width != getRect().getWidth()) || (old_height != getRect().getHeight())) debug_print = true; @@ -76,7 +74,6 @@ void LLToolBarView::draw() llinfos << "Merov debug : draw bottom rect = " << bottom_rect.mLeft << ", " << bottom_rect.mTop << ", " << bottom_rect.mRight << ", " << bottom_rect.mBottom << llendl; llinfos << "Merov debug : draw left rect = " << left_rect.mLeft << ", " << left_rect.mTop << ", " << left_rect.mRight << ", " << left_rect.mBottom << llendl; llinfos << "Merov debug : draw right rect = " << right_rect.mLeft << ", " << right_rect.mTop << ", " << right_rect.mRight << ", " << right_rect.mBottom << llendl; - llinfos << "Merov debug : draw s left rect = " << sizer_left_rect.mLeft << ", " << sizer_left_rect.mTop << ", " << sizer_left_rect.mRight << ", " << sizer_left_rect.mBottom << llendl; old_width = ctrl_rect.getWidth(); old_height = ctrl_rect.getHeight(); debug_print = false; diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 947f0ec184..4a20be63f6 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -1787,6 +1787,7 @@ void LLViewerWindow::initBase() LLPanel* panel_holder = main_view->getChild("toolbar_view_holder"); // Load the toolbar view from file gToolBarView = LLUICtrlFactory::getInstance()->createFromFile("panel_toolbar_view.xml", panel_holder, LLDefaultChildRegistry::instance()); + gToolBarView->setShape(panel_holder->getLocalRect()); // Attach it to the toolbar view holder //panel_holder->addChild(gToolBarView); } diff --git a/indra/newview/skins/default/xui/en/panel_toolbar_view.xml b/indra/newview/skins/default/xui/en/panel_toolbar_view.xml index 6701266887..b24f5c3347 100644 --- a/indra/newview/skins/default/xui/en/panel_toolbar_view.xml +++ b/indra/newview/skins/default/xui/en/panel_toolbar_view.xml @@ -10,51 +10,103 @@ mouse_opaque="false" tab_stop="false" visible="true"> - - - - + + + + + +