/* 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); 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() { // resize container widget buttonmenu_container->set_geometry(0, 0, ui::UI::elementsize.width() * 1.5f, height()); // reposition all children within the container const float x = ui::UI::elementsize.width() * 0.25f; float y = ui::UI::elementsize.height() * 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(x, y); y += ui::UI::elementsize.height() + ui::UI::elementmargin; } } void ButtonMenu::clear() { remove_child(buttonmenu_container); buttonmenu_container = new ui::Window(this); } bool ButtonMenu::on_keypress(const int key, const unsigned int modifier) { switch (key) { case SDLK_ESCAPE: // close window on ESC if (visible()) { this->hide(); return true; } break; default: break; } return Window::on_keypress(key, modifier); } }