/* ui/menuview.cc This file is part of the Osirion project and is distributed under the terms of the GNU General Public License version 2 */ #include "ui/menuview.h" #include "ui/ui.h" namespace ui { MenuView::MenuView(Window *parent, const char * label) : Window(parent) { set_border(false); set_background(false); set_label(label); menu_container = new Container(this); menu_label = new Label(this); hide(); } MenuView::~MenuView() { } void MenuView::resize() { set_size(parent()->size()); menu_label->set_location(UI::elementsize.width() * 0.25, UI::elementsize.width() * 0.25); menu_label->set_size(UI::elementsize.width() * 1.5f, UI::elementsize.height()); menu_container->set_location(UI::elementsize.width() * 0.25, (height() - menu_container->height()) / 2.0f); } void MenuView::generate(core::Entity *entity, const char *menulabel) { if (!menulabel) return; //con_debug << "generating menu " << entity->label() << " " << menulabel << std::endl; remove_children(); menu_container = new Container(this); menu_label = new Label(this, entity->name().c_str()); menu_label->set_background(true); menu_label->set_alignment(AlignCenter); menu_label->set_font(ui::root()->font_large()); core::MenuDescription *menudescr = 0; for (core::Entity::Menus::iterator it = entity->menus().begin(); it != entity->menus().end(); it++) { if ((*it)->label().compare(menulabel) == 0) { menudescr = (*it); } } if (!menudescr) { menu_container->event_resize(); resize(); return; } if (menudescr->text().size()) { Label *label = new Label(menu_container); label->set_text(menudescr->text()); label->set_alignment(AlignCenter); label->set_border(false); label->set_font(ui::root()->font_large()); } for (core::MenuDescription::Buttons::iterator it = menudescr->buttons().begin(); it != menudescr->buttons().end(); it++) { core::ButtonDescription *buttondescr = (*it); Button *button = new Button(menu_container, buttondescr->text().c_str(), buttondescr->command().c_str()); switch (buttondescr->alignment()) { case core::ButtonDescription::Center: button->set_alignment(AlignCenter); break; case core::ButtonDescription::Left: button->set_alignment(AlignLeft | AlignVCenter); break; case core::ButtonDescription::Right: button->set_alignment(AlignRight | AlignVCenter); break; } } menu_container->event_resize(); resize(); } }