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-05 19:03:25 +0000
committerStijn Buys <ingar@osirion.org>2008-10-05 19:03:25 +0000
commitda9beb729c58ca2d91f67ab85a6728b628c27cf2 (patch)
tree96fd5df00a2431f40f515aa9fdf722377a0b6079 /src/ui/ui.cc
parent381c729e777b50771626703e60b422aafc791513 (diff)
user interface library
Diffstat (limited to 'src/ui/ui.cc')
-rw-r--r--src/ui/ui.cc214
1 files changed, 214 insertions, 0 deletions
diff --git a/src/ui/ui.cc b/src/ui/ui.cc
new file mode 100644
index 0000000..be75f11
--- /dev/null
+++ b/src/ui/ui.cc
@@ -0,0 +1,214 @@
+/*
+ ui/ui.cc
+ This file is part of the Osirion project and is distributed under
+ the terms of the GNU General Public License version 2
+*/
+
+#include <string>
+#include <sstream>
+
+#include "auxiliary/functions.h"
+#include "core/core.h"
+#include "sys/sys.h"
+#include "ui/button.h"
+#include "ui/label.h"
+#include "ui/menu.h"
+#include "ui/ui.h"
+#include "ui/widget.h"
+#include "ui/window.h"
+
+namespace ui {
+
+UI *global_ui = 0;
+
+void func_list_ui(std::string const &args)
+{
+ if (global_ui) {
+ global_ui->list();
+ }
+}
+
+void help()
+{
+ con_print << "^BUser interface functions" << std::endl;
+ con_print << " ui help show this help" << std::endl;
+ con_print << " ui list list widgets" << std::endl;
+ con_print << " ui show show user interface" << std::endl;
+ con_print << " ui hide hide user interface" << std::endl;
+}
+
+void func_ui(std::string const &args)
+{
+ if (!global_ui) {
+ con_warn << "User Interface not available!" << std::endl;
+ return;
+ }
+
+ if (!args.size()) {
+ help();
+ return;
+ }
+ std::stringstream argstr(args);
+ std::string command;
+ argstr >> command;
+ aux::to_label(command);
+
+ if (command.compare("help") == 0) {
+ help();
+ } else if (command.compare("list") == 0) {
+ global_ui->list();
+ } else if (command.compare("show") == 0) {
+ global_ui->show();
+ } else if (command.compare("hide") == 0) {
+ global_ui->hide();
+ } else {
+ help();
+ }
+}
+
+void func_menu(std::string const &args)
+{
+ if (!global_ui) {
+ con_warn << "User Interface not available!" << std::endl;
+ return;
+ }
+
+ if (!args.size()) {
+ return;
+ }
+ std::stringstream argstr(args);
+ std::string command;
+ argstr >> command;
+
+ aux::to_label(command);
+
+ if (command.compare("hide") == 0) {
+ root()->hide_window();
+
+ } else if (command.compare("close") == 0) {
+ root()->hide_window();
+
+ } else if (command.compare("list") == 0) {
+
+ } else {
+ root()->show_window(command.c_str());
+ }
+}
+
+UI *root()
+{
+ return global_ui;
+}
+
+void init()
+{
+ con_print << "^BInitializing user interface..." << std::endl;
+ if (!global_ui)
+ global_ui = new UI();
+
+ core::Func *func = core::Func::add("list_ui", func_list_ui);
+ func->set_info("list user interface widgets");
+
+ func = core::Func::add("ui", func_ui);
+ func->set_info("[command] [options] user interface subcommands");
+
+ func = core::Func::add("menu", func_menu);
+ func->set_info("[hide|close|menuname] show or hide a menu");
+}
+
+void shutdown()
+{
+ con_print << "^BShutting down user interface..." << std::endl;
+
+ core::Func::remove("list_ui");
+ core::Func::remove("menu");
+ core::Func::remove("ui");
+
+ if (global_ui) {
+ delete global_ui;
+ global_ui = 0;
+ }
+}
+
+void frame()
+{
+ if (global_ui)
+ global_ui->draw_event();
+}
+
+UI::UI() : Window(0)
+{
+ set_palette(new Palette());
+ set_label("user interface");
+ set_size(1024, 768);
+ set_border(false);
+
+ ui_active_window = 0;
+
+ Menu *menu = 0;
+
+ menu = new Menu(this, "main");
+ menu->add_label("Main menu");
+ menu->add_button("New Game", "connect");
+ menu->add_button("Connect to...", "menu connect");
+ menu->add_button("Options...", "menu options");
+ menu->add_button("Quit", "quit");
+
+ menu = new Menu(this, "options");
+ menu->add_label("Options menu");
+
+ menu = new Menu(this, "connect");
+ menu->add_label("Connect to...");
+}
+
+UI::~UI()
+{
+ if (palette())
+ delete palette();
+}
+
+void UI::list()
+{
+ size_t n = Widget::list(0);
+ con_print << n << " user interface widgets" << std::endl;
+}
+
+void UI::add_window(Window *window)
+{
+ Window::add_window(window);
+ window->hide();
+}
+
+void UI::remove_window(Window *window)
+{
+ if (ui_active_window == window)
+ ui_active_window = 0;
+ Window::remove_window(window);
+}
+
+void UI::show_window(char const *label)
+{
+ Windows::iterator it;
+ for (it = window_children.begin(); it != window_children.end(); it++) {
+ if ((*it)->label().compare(label) == 0) {
+ if (ui_active_window)
+ ui_active_window->hide();
+ ui_active_window = (*it);
+ ui_active_window->resize_event();
+ ui_active_window->show();
+ return;
+ }
+ }
+
+ con_warn << "Unknown window '" << label << "'" << std::endl;
+}
+
+void UI::hide_window()
+{
+ if (ui_active_window) {
+ ui_active_window->hide();
+ ui_active_window = 0;
+ }
+}
+
+}