Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2011-08-28 18:19:48 +0000
committerStijn Buys <ingar@osirion.org>2011-08-28 18:19:48 +0000
commit5afce7d29a2d852446b58b4410c43d7bf2063b11 (patch)
tree9a8f6652d5c65e5ccac0abdeac9dfc2f7aa1b3b0 /src/client/buttonmenu.cc
parent3b75614be6d9f6e84a1b5818c5827dbc0ab5d516 (diff)
Added client::ButtonMenu base class, refactored client::EntityMenu as a ButtonMenu child.
Diffstat (limited to 'src/client/buttonmenu.cc')
-rw-r--r--src/client/buttonmenu.cc92
1 files changed, 92 insertions, 0 deletions
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);
+}
+
+}