testing-repository/Gtkmm3/gtk128_24game/src/MyWin.cc

124 lines
3.5 KiB
C++
Raw Normal View History

2022-04-16 15:12:09 +08:00
#include "MyWin.hh"
MyWin::MyWin(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Glade)
: Gtk::Window(cobject),
2022-04-16 17:12:39 +08:00
ref_builder(ref_Glade),
winned(true)
2022-04-16 15:12:09 +08:00
{
2022-04-21 15:13:01 +08:00
set_icon_name("24game");
2022-04-16 15:12:09 +08:00
// Get Widgets
2022-04-16 17:12:39 +08:00
ref_builder->get_widget("label_numbers", label_numbers);
ref_builder->get_widget("entry_ans", entry_ans);
ref_builder->get_widget("btnstart", btnstart);
2022-04-17 11:13:53 +08:00
ref_builder->get_widget("btnnext",btnnext);
2022-04-16 17:12:39 +08:00
ref_builder->get_widget("btncheck", btncheck);
2022-04-17 11:13:53 +08:00
ref_builder->get_widget("btnclear",btnclear);
2022-04-16 17:12:39 +08:00
ref_builder->get_widget("btnexit", btnexit);
ref_builder->get_widget("btn0", btns[0]);
ref_builder->get_widget("btn1", btns[1]);
ref_builder->get_widget("btn2", btns[2]);
ref_builder->get_widget("btn3", btns[3]);
ref_builder->get_widget("btn4", btns[4]);
ref_builder->get_widget("btn5", btns[5]);
ref_builder->get_widget("btn6", btns[6]);
ref_builder->get_widget("btn7", btns[7]);
ref_builder->get_widget("btn8", btns[8]);
ref_builder->get_widget("btn9", btns[9]);
ref_builder->get_widget("btnadd", btns[10]);
ref_builder->get_widget("btnsubb", btns[11]);
ref_builder->get_widget("btnmul", btns[12]);
ref_builder->get_widget("btndiv", btns[13]);
ref_builder->get_widget("btnleft", btns[14]);
ref_builder->get_widget("btnright", btns[15]);
2022-04-16 15:12:09 +08:00
// Link Signals
2022-04-16 17:12:39 +08:00
btnstart->signal_clicked().connect(sigc::mem_fun(*this, &MyWin::btnstart_clicked));
btnexit->signal_clicked().connect(sigc::mem_fun(*this, &MyWin::hide));
2022-04-17 11:13:53 +08:00
btnnext->signal_clicked().connect(sigc::mem_fun(*this, &MyWin::btnnext_clicked));
2022-04-16 17:12:39 +08:00
btncheck->signal_clicked().connect(sigc::mem_fun(*this, &MyWin::btncheck_clicked));
2022-04-17 11:13:53 +08:00
btnclear->signal_clicked().connect(sigc::mem_fun(*this,&MyWin::btnclear_clicked));
2022-04-16 17:12:39 +08:00
for (int i = 0; i < 16; i++)
{
btns[i]->signal_clicked().connect(sigc::bind(sigc::mem_fun(*this, &MyWin::btns_clicked), btns[i]));
2022-04-16 15:12:09 +08:00
}
2022-04-16 17:12:39 +08:00
entry_ans->signal_grab_focus().connect(sigc::mem_fun(*this, &MyWin::entry_ans_focus));
2022-04-16 15:12:09 +08:00
}
2022-04-16 17:12:39 +08:00
void MyWin::btns_clicked(Gtk::Button *button)
{
2022-04-16 15:12:09 +08:00
// Get Original text and add number from button
2022-04-16 17:12:39 +08:00
// 1.Get text buffer for insert
auto buffer = entry_ans->get_buffer();
// 2.Get text to insert
2022-04-16 15:12:09 +08:00
Glib::ustring label = button->get_label();
2022-04-16 17:12:39 +08:00
if (focused)
{
pos = entry_ans->get_position();
}
// 3.Get Position
buffer->insert_text(pos, label);
pos++;
focused = false;
2022-04-16 15:12:09 +08:00
}
2022-04-16 17:12:39 +08:00
void MyWin::entry_ans_focus()
{
focused = true;
}
void MyWin::btnstart_clicked()
{
2022-04-16 15:12:09 +08:00
// Start Game
2022-04-16 17:12:39 +08:00
if (winned)
{
main_game.getnumbers();
label_numbers->set_label(main_game.numbers_char);
}
else
{
label_numbers->set_label(tmp);
}
2022-04-17 11:13:53 +08:00
// Save the numbers
tmp = label_numbers->get_label();
2022-04-16 15:12:09 +08:00
}
2022-04-16 17:12:39 +08:00
void MyWin::btncheck_clicked()
{
2022-04-16 15:12:09 +08:00
// Check Answer
2022-04-16 17:12:39 +08:00
Glib::ustring answer = entry_ans->get_text();
2022-04-17 11:13:53 +08:00
winned = main_game.startgame(std::string(answer.c_str()));
if (winned)
2022-04-16 17:12:39 +08:00
{
label_numbers->set_label("You Winned!");
}
else
{
label_numbers->set_label("You Lost!");
}
2022-04-16 15:12:09 +08:00
}
2022-04-17 11:13:53 +08:00
void MyWin::btnnext_clicked(){
main_game.getnumbers();
label_numbers->set_label(main_game.numbers_char);
}
void MyWin::btnclear_clicked(){
// Clear the text
entry_ans->set_text("");
}
2022-04-16 15:12:09 +08:00
MyWin *MyWin::create()
{
// Create a new window
2022-04-16 17:12:39 +08:00
MyWin *window = nullptr;
2022-04-16 15:12:09 +08:00
auto builder = Gtk::Builder::create_from_resource("/org/gtk/daleclack/window.ui");
2022-04-16 17:12:39 +08:00
builder->get_widget_derived("window", window);
2022-04-16 15:12:09 +08:00
return window;
}