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>2008-10-12 17:27:00 +0000
committerStijn Buys <ingar@osirion.org>2008-10-12 17:27:00 +0000
commit574bf11742c40203a4433c0b69264014b10b5a96 (patch)
tree5fdaa40d22c38e5d8cce47d43a1a892008322598 /src/ui/ui.cc
parentb417df720584c101f3799874a0c836a543a8d0a8 (diff)
container widget
Diffstat (limited to 'src/ui/ui.cc')
-rw-r--r--src/ui/ui.cc126
1 files changed, 65 insertions, 61 deletions
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();