From 574bf11742c40203a4433c0b69264014b10b5a96 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Sun, 12 Oct 2008 17:27:00 +0000 Subject: container widget --- src/ui/ui.cc | 126 ++++++++++++++++++++++++++++++----------------------------- 1 file changed, 65 insertions(+), 61 deletions(-) (limited to 'src/ui/ui.cc') diff --git a/src/ui/ui.cc b/src/ui/ui.cc index 8d60543..2cadd8b 100644 --- a/src/ui/ui.cc +++ b/src/ui/ui.cc @@ -16,7 +16,6 @@ #include "ui/menu.h" #include "ui/ui.h" #include "ui/widget.h" -#include "ui/window.h" namespace ui { @@ -117,26 +116,24 @@ void func_menu(std::string const &args) aux::to_label(command); if (command.compare("hide") == 0) { - root()->hide_window(); + root()->hide_menu(); } else if (command.compare("close") == 0) { - root()->hide_window(); + root()->hide_menu(); } else if (command.compare("back") == 0) { - root()->previous_window(); + root()->previous_menu(); } else if (command.compare("previous") == 0) { - root()->previous_window(); + root()->previous_menu(); } else if (command.compare("list") == 0) { root()->list_menus(); } else { - root()->show_window(command.c_str()); + root()->show_menu(command.c_str()); } } -/* -- class UI ----------------------------------------------------- */ - UI *root() { return global_ui; @@ -193,6 +190,7 @@ UI::UI() : Window(0) set_label("root"); set_size(1024, 768); set_border(false); + set_background(false); // default palette ui_palette = new Palette(); @@ -221,14 +219,15 @@ UI::~UI() */ void UI::load() { - Windows::iterator it; - for (it = window_children.begin(); it != window_children.end(); it++) { - Window *window = (*it); - remove_child(window); + Menus::iterator it; + for (it = ui_menus.begin(); it != ui_menus.end(); it++) { + Window *menu = (*it); + remove_child(menu); } - window_children.clear(); + ui_menus.clear(); + ui_mouse_focus = this; - ui_active_window = 0; + ui_active_menu = 0; std::string filename("ui"); @@ -271,6 +270,7 @@ void UI::load() if (ini.got_key_string("menu", strval)) { aux::to_label(strval); menu = new Menu(this, strval.c_str()); + add_menu(menu); menu->load(); continue; } else { @@ -302,11 +302,11 @@ void UI::load() } } - con_debug << " " << ini.name() << " " << window_children.size() << " menus" << std::endl; + con_debug << " " << ini.name() << " " << ui_menus.size() << " menus" << std::endl; ini.close(); // fallback main menu - if (!find_window("main")) { + if (!find_menu("main")) { con_warn << "menu 'main' not found, using default" << std::endl; Menu *menu = new Menu(this, "main"); menu->add_label("Main Menu"); @@ -315,7 +315,7 @@ void UI::load() } // fallback game menu - if (!find_window("game")) { + if (!find_menu("game")) { con_warn << "menu 'game' not found, using default" << std::endl; Menu *menu = new Menu(this, "game"); menu->add_label("Game Menu"); @@ -330,58 +330,62 @@ void UI::list() const con_print << n << " user interface widgets" << std::endl; } -void UI::list_menus() const +UI::Menus::iterator UI::find_menu(Window *menu) { - for (Windows::const_iterator it = window_children.begin(); it != window_children.end(); it++) { - const Window *window = (*it); - con_print << " " << window->label() << std::endl; + Menus::iterator it; + for (it = ui_menus.begin(); it != ui_menus.end(); it++) { + if ((*it) == menu) + return it; } - con_print << window_children.size() << " menus" << std::endl; + + return it; } -void UI::add_window(Window *window) +Window *UI::find_menu(const char *label) { - Window::add_window(window); - window->hide(); + for (Menus::const_iterator it = ui_menus.begin(); it != ui_menus.end(); it++) { + if ((*it)->label().compare(label) == 0) { + return (*it); + } + } + + return 0; } -void UI::remove_window(Window *window) +void UI::list_menus() const { - if (ui_active_window == window) { - ui_active_window = 0; - ui_mouse_focus = this; - ui_input_focus = this; + for (Menus::const_iterator it = ui_menus.begin(); it != ui_menus.end(); it++) { + const Window *menu = (*it); + con_print << " " << menu->label() << std::endl; } - - Window::remove_window(window); + con_print << ui_menus.size() << " menus" << std::endl; } -Window *UI::find_window(const char *label) const +void UI::add_menu(Window *menu) { - for (Windows::const_iterator it = window_children.begin(); it != window_children.end(); it++) { - if ((*it)->label().compare(label) == 0) { - return (*it); - } + Menus::iterator it = find_menu(menu); + if (it == ui_menus.end()) { + ui_menus.push_back(menu); } - return 0; + } -void UI::show_window(const char *label) +void UI::show_menu(const char *label) { - Window *window = find_window(label); + Window *menu = find_menu(label); - if (window) { - if (ui_active_window) { - ui_active_window->hide(); - window->set_previous(ui_active_window); + if (menu) { + if (ui_active_menu) { + ui_active_menu->hide(); + menu->set_previous(ui_active_menu); } else { - window->clear_previous(); + menu->clear_previous(); } - ui_active_window = window; - ui_active_window->event_resize(); - ui_active_window->raise(); - ui_active_window->show(); - ui_active_window->set_focus(); + ui_active_menu = menu; + ui_active_menu->event_resize(); + ui_active_menu->raise(); + ui_active_menu->show(); + ui_active_menu->set_focus(); ui_mouse_focus = this; ui_input_focus = this; } else { @@ -389,29 +393,29 @@ void UI::show_window(const char *label) } } -void UI::hide_window() +void UI::hide_menu() { - if (ui_active_window) { - ui_active_window->hide(); - ui_active_window = 0; + if (ui_active_menu) { + ui_active_menu->hide(); + ui_active_menu = 0; } } -void UI::previous_window() +void UI::previous_menu() { - if (ui_active_window) { - if (ui_active_window->previous().size()) { - show_window(ui_active_window->previous().c_str()); + if (ui_active_menu) { + if (ui_active_menu->previous().size()) { + show_menu(ui_active_menu->previous().c_str()); } else { - hide_window(); + hide_menu(); } } } void UI::frame() { - if (ui_active_window && !ui_active_window->visible()) { - ui_active_window = 0; + if (ui_active_menu && !ui_active_menu->visible()) { + ui_active_menu = 0; } event_draw(); -- cgit v1.2.3