/* client/messagebox.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 "audio/audio.h" #include "client/messagebox.h" #include "core/commandbuffer.h" #include "ui/ui.h" namespace client { Messagebox::Messagebox(ui::Widget * parent) : ui::Window(parent) { set_border(false); set_background(false); set_label("messagebox"); messagebox_frame = new ui::Window(this); messagebox_frame->set_border(true); messagebox_frame->set_background(true); messagebox_label = new ui::Label(messagebox_frame); messagebox_label->set_border(false); messagebox_label->set_background(false); messagebox_label->set_alignment(ui::AlignTop | ui::AlignHCenter); messagebox_button1 = new ui::Button(messagebox_frame); messagebox_button2 = new ui::Button(messagebox_frame); } Messagebox::~Messagebox() { } void Messagebox::set_text(const std::string &text) { messagebox_label->set_text(text); } void Messagebox::set_buttons(const std::string &text1, const std::string &command1, const std::string &text2, const std::string &command2) { if (text1.size()) { messagebox_button1->set_text(text1); } else { messagebox_button1->set_text("Close"); } if (command1.size()) { messagebox_button1->set_command("remote " + command1); } else { messagebox_button1->set_command(""); } messagebox_button2->set_text(text2); if (command2.size()) { messagebox_button2->set_command("remote " + command2); } else { messagebox_button2->set_command(""); } if (text2.size()) { messagebox_button2->show(); } else { messagebox_button2->hide(); } } void Messagebox::resize() { const float padding = ui::root()->font_large()->height(); set_size(parent()->size()); messagebox_frame->set_size( ui::UI::elementsize.width() * 3.0f, ui::UI::elementsize.width() * 1.5f ); messagebox_frame->set_location( (width() - messagebox_frame->width()) * 0.5f, (height() - messagebox_frame->height()) * 0.5f ); messagebox_label->set_size(messagebox_frame->width() - padding * 2.0f, messagebox_frame->height() - padding * 2.0f); messagebox_label->set_location(padding, padding); messagebox_button1->set_size(ui::UI::elementsize); messagebox_button2->set_size(ui::UI::elementsize); if (messagebox_button2->visible()) { const float l = (messagebox_frame->width() - messagebox_button1->width() - messagebox_button2->width() - padding * 2.0f) * 0.5f; messagebox_button1->set_location(l, messagebox_frame->height() - messagebox_button1->height() - padding); messagebox_button2->set_location(messagebox_button1->right() + padding, messagebox_frame->height() - messagebox_button2->height() - padding); } else { messagebox_button1->set_location((messagebox_frame->width() - messagebox_button1->width()) * 0.5f, messagebox_frame->height() - messagebox_button1->height() - padding); } } bool Messagebox::on_emit(Widget *sender, const Event event, void *data) { if ((sender == messagebox_button1) || (sender == messagebox_button2)) { if (event == Widget::EventButtonClicked) { hide(); } return true; } return false; } bool Messagebox::on_keypress(const int key, const unsigned int modifier) { std::string command; switch (key) { case SDLK_RETURN: case SDLK_KP_ENTER: command.assign(messagebox_button1->command()); if (command.size()) { core::cmd() << command << std::endl; } audio::play("ui/clicked"); hide(); return true; break; case SDLK_ESCAPE: if (messagebox_button2->visible()) { command.assign(messagebox_button2->command()); } else { command.assign(messagebox_button1->command()); } if (command.size()) { core::cmd() << command << std::endl; } audio::play("ui/clicked"); hide(); return true; break; default: break; } return Window::on_keypress(key, modifier); } } // namespace client