From 5afce7d29a2d852446b58b4410c43d7bf2063b11 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Sun, 28 Aug 2011 18:19:48 +0000 Subject: Added client::ButtonMenu base class, refactored client::EntityMenu as a ButtonMenu child. --- src/client/buttonmenu.cc | 92 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 src/client/buttonmenu.cc (limited to 'src/client/buttonmenu.cc') diff --git a/src/client/buttonmenu.cc b/src/client/buttonmenu.cc new file mode 100644 index 0000000..ed15223 --- /dev/null +++ b/src/client/buttonmenu.cc @@ -0,0 +1,92 @@ +/* + 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); +} + +} -- cgit v1.2.3