📄 ns_messagebox.cpp
字号:
// NS_MessageBox.cpp: implementation of the NS_MessageBox class.////////////////////////////////////////////////////////////////////////#include "NS_MessageBox.h"#include <ClanLib/signals.h>#include <ClanLib/signals.h>#include <ClanLib/display.h>#include <ClanLib/display.h>#include <ClanLib/core.h>#include <ClanLib/core.h>//////////////////////////////////////////////////////////////////////// Construction/Destruction//////////////////////////////////////////////////////////////////////NS_MessageBox::NS_MessageBox(CL_Component * parent, std::string const & title, std::string const & text, std::string const & button1, std::string const & button2, std::string const & button3) : CL_Window(parent, parent->get_style_manager()), result(-1), title(title), text(text), button1_text(button1), button2_text(button2), button3_text(button3), font(0){ font = new CL_Font("my_fnt_4", get_style_manager()->get_resources()); int width = 400; int height = 50 + 40 + font->get_height(text, CL_Size(width - 15, 0)); // Calc dialog position set_position(CL_Rect( CL_Display::get_width() / 2 - width / 2, CL_Display::get_height() / 2 - height / 2, CL_Display::get_width() / 2 + width / 2, CL_Display::get_height() / 2 + height / 2)); set_title(title); int num_buttons = 1; if (!button2_text.empty()) num_buttons = 2; if (!button3_text.empty()) num_buttons = 3; int btn_pos_y = height - 40; switch(num_buttons) { case 1: { CL_Button * btn_1 = new CL_Button(CL_Point(width / 2, btn_pos_y), button1_text, get_client_area()); btn_1->set_position(width / 2 - btn_1->get_width() / 2, btn_pos_y); slots.connect(btn_1->sig_clicked(), this, &NS_MessageBox::on_button1); btn_1->find_preferred_size(); components["btn_1"] = btn_1; } break; case 2: { CL_Button * btn_1 = new CL_Button(CL_Point(width / 2, btn_pos_y), button1_text, get_client_area()); CL_Button * btn_2 = new CL_Button(CL_Point(width / 2, btn_pos_y), button2_text, get_client_area()); btn_1->find_preferred_size(); btn_2->find_preferred_size(); { int const total_size = btn_1->get_width() + 20 + btn_2->get_width(); btn_1->set_position(width / 2 - total_size / 2, btn_pos_y); btn_2->set_position(width / 2 - total_size / 2 + btn_1->get_width() + 20, btn_pos_y); } slots.connect(btn_1->sig_clicked(), this, &NS_MessageBox::on_button1); slots.connect(btn_2->sig_clicked(), this, &NS_MessageBox::on_button2); components["btn_1"] = btn_1; components["btn_2"] = btn_2; } break; case 3: { CL_Button * btn_1 = new CL_Button(CL_Point(width / 2, btn_pos_y), button1_text, get_client_area()); CL_Button * btn_2 = new CL_Button(CL_Point(width / 2, btn_pos_y), button2_text, get_client_area()); CL_Button * btn_3 = new CL_Button(CL_Point(width / 2, btn_pos_y), button3_text, get_client_area()); btn_1->find_preferred_size(); btn_2->find_preferred_size(); btn_3->find_preferred_size(); { int const total_size = btn_1->get_width() + 20 + btn_2->get_width() + 20 + btn_3->get_width(); btn_1->set_position(width / 2 - total_size / 2, btn_pos_y); btn_2->set_position(width / 2 - total_size / 2 + btn_1->get_width() + 20, btn_pos_y); btn_3->set_position(width / 2 - total_size / 2 + btn_1->get_width() + 20 + btn_2->get_width() + 20, btn_pos_y); } slots.connect(btn_1->sig_clicked(), this, &NS_MessageBox::on_button1); slots.connect(btn_2->sig_clicked(), this, &NS_MessageBox::on_button2); slots.connect(btn_3->sig_clicked(), this, &NS_MessageBox::on_button3); components["btn_1"] = btn_1; components["btn_2"] = btn_2; components["btn_3"] = btn_3; } break; } // Connect signals slots.connect(CL_Keyboard::sig_key_down(), this, &NS_MessageBox::on_key_down); slots.connect(this->sig_end_paint(), this, &NS_MessageBox::on_end_paint);}NS_MessageBox::~NS_MessageBox(){ std::map<std::string, CL_Component * >::iterator it = components.begin(); for(; it != components.end(); ++it) delete it->second; delete font;}void NS_MessageBox::on_key_down(CL_InputEvent const & key){ if (key.id == CL_KEY_ESCAPE) { result = -1; quit(); } else if (key.id == CL_KEY_RETURN) { result = 1; quit(); }}int NS_MessageBox::info(CL_Component * parent, std::string const & title, std::string const & text, std::string const & button1, std::string const & button2, std::string const & button3){ NS_MessageBox dlg(parent, title, text, button1, button2, button3); dlg.run(); return dlg.get_result();}int NS_MessageBox::get_result() const{ return result;}void NS_MessageBox::on_button1(){ result = 1; quit();}void NS_MessageBox::on_button2(){ result = 2; quit();}void NS_MessageBox::on_button3(){ result = 3; quit();}void NS_MessageBox::on_end_paint(){ CL_Rect rect = get_position(); rect.left += 15 + 15; rect.right -= 15; rect.top += 50; rect.bottom -= 40; font->draw(rect, text);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -