/* client/entitymenu.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/ui.h" #include "ui/button.h" #include "ui/paint.h" #include "client/entitymenu.h" namespace client { EntityMenu::EntityMenu(ui::Widget *parent, const char * label) : ui::Window(parent) { set_border(false); set_background(false); set_label(label); menu_container = new ui::Container(this); hide(); } EntityMenu::~EntityMenu() { } void EntityMenu::resize() { set_size(parent()->size()); menu_container->set_location(ui::UI::elementsize.height(), (height() - menu_container->height()) / 2.0f); } void EntityMenu::clear() { remove_children(); } void EntityMenu::generate(core::Entity *entity, const char *menulabel) { using namespace ui; if (!menulabel) return; //con_debug << "generating menu " << entity->label() << " " << menulabel << std::endl; clear(); menu_container = new Container(this); 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(); } }