/* ui/menu.cc This file is part of the Osirion project and is distributed under the terms of the GNU General Public License version 2 */ #include "client/buttonmenu.h" #include "filesystem/filesystem.h" #include "ui/ui.h" namespace client { ButtonMenu::ButtonMenu(ui::Widget *parent, const char *label) : ui::Window(parent) { set_label(label); set_border(false); set_background(false); buttonmenu_container = new ui::Window(this); buttonmenu_compact = false; hide(); } ButtonMenu::~ButtonMenu() { } ui::Label *ButtonMenu::add_label(char const * text) { ui::Label *label = new ui::Label(buttonmenu_container, text); label->set_alignment(ui::AlignCenter); label->set_border(false); label->set_font(ui::root()->font_large()); return label; } ui::Button *ButtonMenu::add_button(char const *text, char const *command) { return new ui::Button(buttonmenu_container, text, command); } void ButtonMenu::resize() { // reposition all children within the container const float margin = ui::UI::elementsize.height(); float y = margin * 0.5f; for (Children::iterator it = buttonmenu_container->children().begin(); it != buttonmenu_container->children().end(); it++) { Widget *w = (*it); w->set_size(ui::UI::elementsize); w->set_location(margin, y); y += ui::UI::elementsize.height() + ui::UI::padding; } // resize container widget if (!buttonmenu_compact) { buttonmenu_container->set_geometry(0, 0, ui::UI::elementsize.width() + 2.0f * margin, height()); } else { y += ui::UI::elementsize.height() * 0.5f; buttonmenu_container->set_geometry(0, (height() - y) * 0.5f, ui::UI::elementsize.width() + 2.0f * margin, y); } } void ButtonMenu::clear() { remove_child(buttonmenu_container); buttonmenu_container = new ui::Window(this); } }