diff options
author | Stijn Buys <ingar@osirion.org> | 2012-10-13 15:38:03 +0000 |
---|---|---|
committer | Stijn Buys <ingar@osirion.org> | 2012-10-13 15:38:03 +0000 |
commit | 5dea1a263136c4cbe011de3325605dd3dc4523af (patch) | |
tree | 6da09a6007a148d5fe13254f275bb68b71242429 | |
parent | 3b8ea0849fac5532d61a90608bda876cf518ba1b (diff) |
Added dialog infrastructure.
-rw-r--r-- | src/client/Makefile.am | 2 | ||||
-rw-r--r-- | src/client/dialog.cc | 72 | ||||
-rw-r--r-- | src/client/dialog.h | 48 | ||||
-rw-r--r-- | src/client/mainmenu.cc | 49 | ||||
-rw-r--r-- | src/client/mainmenu.h | 3 | ||||
-rw-r--r-- | src/client/mainwindow.cc | 3 |
6 files changed, 171 insertions, 6 deletions
diff --git a/src/client/Makefile.am b/src/client/Makefile.am index 7b3c69b..1baefd8 100644 --- a/src/client/Makefile.am +++ b/src/client/Makefile.am @@ -15,6 +15,7 @@ noinst_HEADERS = \ chat.h \ client.h \ clientext.h \ + dialog.h \ entitymenu.h \ galaxymapwidget.h \ gamewindow.h \ @@ -46,6 +47,7 @@ libclient_la_SOURCES = \ chat.cc \ client.cc \ clientext.cc \ + dialog.cc \ entitymenu.cc \ galaxymapwidget.cc \ gamewindow.cc \ diff --git a/src/client/dialog.cc b/src/client/dialog.cc new file mode 100644 index 0000000..f113433 --- /dev/null +++ b/src/client/dialog.cc @@ -0,0 +1,72 @@ +/* + client/dialog.cc + This file is part of the Osirion project and is distributed under + the terms and conditions of the GNU General Public License version 2 +*/ + +#include "client/dialog.h" +#include "ui/ui.h" + +namespace client +{ + +Dialog::Dialog(ui::Widget * parent) : + ui::Window(parent) +{ + set_border(false); + set_background(false); + set_label("dialog"); + + dialog_widget = new ui::Widget(this); + dialog_widget->set_border(true); + dialog_widget->set_background(true); + + dialog_label = new ui::Label(dialog_widget); + dialog_label->set_border(false); + dialog_label->set_background(false); + dialog_label->set_alignment(ui::AlignTop | ui::AlignHCenter); + + dialog_button = new ui::Button(dialog_widget); +} + +Dialog::~Dialog() +{ +} + +void Dialog::set_text(const std::string &text) +{ + dialog_label->set_text(text); +} + +void Dialog::set_button(const std::string &text) +{ + dialog_button->set_text(text); +} + +void Dialog::set_command(const std::string &command) +{ + dialog_button->set_command(command); +} + +void Dialog::resize() +{ + const float padding = ui::root()->font_large()->height(); + + dialog_widget->set_size( + ui::UI::elementsize.width() * 3.0f, + ui::UI::elementsize.width() * 2.0f + ); + dialog_widget->set_location( + (width() - dialog_widget->width()) * 0.5f, + (height() - dialog_widget->height()) * 0.5f + ); + + dialog_label->set_size(dialog_widget->width() - padding * 2.0f, dialog_widget->height() - padding * 2.0f); + dialog_label->set_location(padding, padding); + + dialog_button->set_size(ui::UI::elementsize); + dialog_button->set_location((dialog_widget->width() - dialog_button->width()) * 0.5f, + dialog_widget->height() - dialog_button->height() - padding); +} + +} // namespace client diff --git a/src/client/dialog.h b/src/client/dialog.h new file mode 100644 index 0000000..63926f9 --- /dev/null +++ b/src/client/dialog.h @@ -0,0 +1,48 @@ +/* + client/dialog.h + This file is part of the Osirion project and is distributed under + the terms and conditions of the GNU General Public License version 2 +*/ + +#ifndef __INCLUDED_CLIENT_DIALOG_H__ +#define __INCLUDED_CLIENT_DIALOG_H__ + +#include "ui/window.h" +#include "ui/button.h" +#include "ui/label.h" + +namespace client +{ + +/** + * @brief a generic dialog window class + * */ +class Dialog : public ui::Window +{ +public: + Dialog(ui::Widget *parent = 0); + virtual ~Dialog(); + + void set_text(const std::string &text); + + void set_button(const std::string &text); + + void set_command(const std::string &command); + +protected: + virtual void resize(); + +private: + + /// the actual dialog widget + ui::Widget *dialog_widget; + + ui::Label *dialog_label; + ui::Button *dialog_button; +}; + +} + +#endif // __INCLUDED_CLIENT_DIALOG_H__ + + diff --git a/src/client/mainmenu.cc b/src/client/mainmenu.cc index cfed85f..7271bcf 100644 --- a/src/client/mainmenu.cc +++ b/src/client/mainmenu.cc @@ -5,6 +5,7 @@ */ #include "client/buttonmenu.h" +#include "client/dialog.h" #include "client/mainmenu.h" #include "client/savegamemenu.h" #include "core/core.h" @@ -62,6 +63,7 @@ void MainMenu::load_definitions() con_debug << " Loading menu definitions..." << std::endl; + Dialog *dialog = 0; ui::Label *label = 0; ui::Button *button = 0; ButtonMenu *menu = 0; @@ -72,6 +74,13 @@ void MainMenu::load_definitions() if (ini.got_section()) { if (ini.got_section("menu")) { + dialog = 0; + menu = 0; + continue; + + // dialog + } else if (ini.got_section("dialog")) { + dialog = 0; menu = 0; continue; @@ -83,6 +92,7 @@ void MainMenu::load_definitions() } else { button = menu->add_button(); } + continue; // menu label } else if (ini.got_section("label")) { @@ -92,6 +102,7 @@ void MainMenu::load_definitions() } else { label = menu->add_label(); } + continue; } else { ini.unknown_section(); @@ -99,18 +110,46 @@ void MainMenu::load_definitions() } } else if (ini.got_key()) { - - if (ini.in_section("menu")) { + + if (ini.in_section("dialog")) { + if (!dialog) { + if (ini.got_key_label("label", strval)) { + dialog = new Dialog(this); + dialog->set_label(strval); + } + } else { + + if (ini.got_key_label("label", strval)) { + dialog->set_label(strval); + + } else if (ini.got_key_string("text", strval)) { + dialog->set_text(strval); + + } else if (ini.got_key_string("button", strval)) { + dialog->set_button(strval); + + } else if (ini.got_key_string("command", strval)) { + for (size_t i = 0; i <= strval.size(); i++) { + if (strval[i] == ',') strval[i] = ';'; + } + aux::strip_quotes(strval); + dialog->set_command(strval); + } else { + ini.unknown_key(); + } + } + + } else if (ini.in_section("menu")) { - if (ini.got_key_string("label", strval)) { - aux::to_label(strval); + if (ini.got_key_label("label", strval)) { for (ui::Widget::Children::iterator child = children().begin(); child != children().end(); ++child) { if ((*child)->label().compare(strval) == 0) { + // assert child is a menu menu = static_cast<ButtonMenu*>((*child)); } } - + if (!menu) { menu = new ButtonMenu(this, strval.c_str()); } diff --git a/src/client/mainmenu.h b/src/client/mainmenu.h index 0a0354c..8b1ec58 100644 --- a/src/client/mainmenu.h +++ b/src/client/mainmenu.h @@ -9,10 +9,11 @@ #include "ui/window.h" #include "ui/bitmap.h" +#include "client/dialog.h" namespace client { - + /** * @brief the client's main menu window * The MainMenu contains a number of child menu windows, diff --git a/src/client/mainwindow.cc b/src/client/mainwindow.cc index 66244de..2f3f66a 100644 --- a/src/client/mainwindow.cc +++ b/src/client/mainwindow.cc @@ -124,6 +124,9 @@ void MainWindow::draw() mainwindow_gamewindow->hide(); mainwindow_mainmenu->show(); + } else if (core::localcontrol()->state() == core::Entity::Destroyed) { + mainwindow_mainmenu->show_menu("respawn"); + } else if (mainwindow_gamewindow->hidden()) { mainwindow_gamewindow->show(); } |