diff --git a/apps/openmw/mwgui/messagebox.cpp b/apps/openmw/mwgui/messagebox.cpp index 17de1f504a..61a359e7ec 100644 --- a/apps/openmw/mwgui/messagebox.cpp +++ b/apps/openmw/mwgui/messagebox.cpp @@ -187,7 +187,13 @@ InteractiveMessageBox::InteractiveMessageBox(MessageBoxManager& parMessageBoxMan : Layout("openmw_interactive_messagebox_layout.xml") , mMessageBoxManager(parMessageBoxManager) { - mTextButtonPadding = 10; + int fixedWidth = 500; + int textPadding = 10; // padding between text-widget and main-widget + int textButtonPadding = 20; // padding between the text-widget und the button-widget + int buttonLeftPadding = 10; // padding between the buttons if horizontal + int buttonTopPadding = 5; // ^-- if vertical + int buttonPadding = 5; // padding between button label and button itself + getWidget(mMessageWidget, "message"); getWidget(mButtonsWidget, "buttons"); @@ -196,32 +202,98 @@ InteractiveMessageBox::InteractiveMessageBox(MessageBoxManager& parMessageBoxMan mMessageWidget->addText(message); MyGUI::IntSize textSize = mMessageWidget->_getTextSize(); - std::cout << "textSize.width " << textSize.width << " textSize.height " << textSize.height << std::endl; - - MyGUI::IntSize size; - size.width = 500; // 500 is fixed width - size.height = textSize.height + 100; // 100 is mButtonWidget high - mMainWidget->setSize(size); - size.width = 480; // fixed width (500) - 2*padding (10) - size.height = textSize.height; - mMessageWidget->setSize(size); - MyGUI::IntCoord coord(10, textSize.height+mTextButtonPadding, 100, 50); + int buttonsWidth = 0; + int buttonHeight = 0; + MyGUI::IntCoord dummyCoord(0, 0, 0, 0); std::vector::const_iterator it; for(it = buttons.begin(); it != buttons.end(); ++it) { - std::cout << "add button " << *it << std::endl; MyGUI::ButtonPtr button = mButtonsWidget->createWidget( MyGUI::WidgetStyle::Child, std::string("MW_Button"), - coord, + dummyCoord, MyGUI::Align::Default); button->setCaption(*it); + mButtons.push_back(button); + + buttonsWidth += button->_getTextSize().width + 2*buttonPadding + 2*buttonLeftPadding; + buttonHeight = button->_getTextSize().height + 2*buttonPadding + 2*buttonTopPadding; } + MyGUI::IntSize mainWidgetSize; + if(buttonsWidth < fixedWidth) + { + // on one line + + int left; + if(textSize.width + 2*textPadding < buttonsWidth) + { + mainWidgetSize.width = buttonsWidth; + left = buttonLeftPadding; + } + else + { + mainWidgetSize.width = textSize.width + 2*textPadding; + left = (textSize.width - buttonsWidth)/2; + } + mainWidgetSize.height = textSize.height + textButtonPadding + buttonHeight; + mMainWidget->setSize(mainWidgetSize); + + mMessageWidget->setSize(textSize); + + MyGUI::IntCoord buttonCord; + MyGUI::IntSize buttonSize(0, buttonHeight); + + std::vector::const_iterator button; + for(button = mButtons.begin(); button != mButtons.end(); ++button) + { + buttonCord.left = left; + buttonCord.top = textSize.height + textButtonPadding; + + buttonSize.width = (*button)->_getTextSize().width + buttonPadding*2; + buttonSize.height = (*button)->_getTextSize().height + buttonPadding*2; + + (*button)->setCoord(buttonCord); + (*button)->setSize(buttonSize); + + left += buttonSize.width + 2*buttonLeftPadding; + } + } + else + { + // among each other + + mainWidgetSize.width = textSize.width + 2*textPadding; + mainWidgetSize.height = textSize.height + 2*textPadding + textButtonPadding + buttonHeight * buttons.size(); + mMainWidget->setSize(mainWidgetSize); + + mMessageWidget->setSize(textSize); + + MyGUI::IntCoord buttonCord; + MyGUI::IntSize buttonSize(0, buttonHeight); + + int top = textButtonPadding + buttonTopPadding + textSize.height; + + std::vector::const_iterator button; + for(button = mButtons.begin(); button != mButtons.end(); ++button) + { + buttonCord.top = top; + buttonCord.left = (textSize.width - (*button)->_getTextSize().width)/2; + + buttonSize.width = (*button)->_getTextSize().width + buttonPadding*2; + buttonSize.height = (*button)->_getTextSize().height + buttonPadding*2; + + (*button)->setCoord(buttonCord); + (*button)->setSize(buttonSize); + + top += buttonSize.height + 2*buttonTopPadding; + } + + } } diff --git a/apps/openmw/mwgui/messagebox.hpp b/apps/openmw/mwgui/messagebox.hpp index f7c7197fad..b8c205823f 100644 --- a/apps/openmw/mwgui/messagebox.hpp +++ b/apps/openmw/mwgui/messagebox.hpp @@ -73,8 +73,6 @@ namespace MWGui MyGUI::EditPtr mMessageWidget; MyGUI::WidgetPtr mButtonsWidget; std::vector mButtons; - - int mTextButtonPadding; }; }