Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/menuview.cc')
-rw-r--r--src/ui/menuview.cc95
1 files changed, 95 insertions, 0 deletions
diff --git a/src/ui/menuview.cc b/src/ui/menuview.cc
new file mode 100644
index 0000000..71bdd1a
--- /dev/null
+++ b/src/ui/menuview.cc
@@ -0,0 +1,95 @@
+/*
+ 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();
+}
+
+}