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;
|
|
|
|
}
|