#include #include #include #include #include #include "menu_callbacks.hpp" #include "solution_algorithm.hpp" #include "gameplay.hpp" #include "img_handler.hpp" void new_game_callback(Fl_Widget*, void *gp) { PuzzleGame::StartGame(reinterpret_cast(gp)); } static bool check_correct_path_to_img(const char *path) { if(path == nullptr) return false; std::string p(path); std::string ext = p.substr(p.find_last_of('.')); return ext == ".png" || ext == ".jpg"; } void load_file_callback(Fl_Widget *sender, void*) { const char *path = nullptr; auto dialog = Fl_Native_File_Chooser{}; dialog.type(Fl_Native_File_Chooser::BROWSE_FILE); dialog.filter("JPEG Files\t*.jpg\nPNG Files\t*.png"); #if defined(_WIN32) dialog.directory((string {getenv("HOMEPATH")} + "\\Desktop").c_str()); #else dialog.directory((std::string {getenv("HOME")} + "/Desktop").c_str()); #endif dialog.options(Fl_Native_File_Chooser::SAVEAS_CONFIRM | Fl_Native_File_Chooser::NEW_FOLDER); if (dialog.show() == 0) path = dialog.filename(); if(check_correct_path_to_img(path)) { ImageHandler ih(path); ih.load_img(); ih.resize_img(); ih.save_img(); fl_message_title("Info"); fl_message("Image successfully added"); } } void exit_callback(Fl_Widget *w, void*) { w->parent()->hide(); } void solve_problem_callback(Fl_Widget *w, void *gp) { GameParams *game = reinterpret_cast(gp); std::unique_ptr algorithm = ASearch::Start(game); Node *goal = algorithm->FindSolution(); algorithm->ShowSolution(goal); int answer = fl_choice("Play again?", "No", "Yes", nullptr); if(answer) PuzzleGame::StartGame(game); else game->win->hide(); } void about_callback(Fl_Widget *w, void*) { fl_message_title("About"); fl_message("This app is devoted to my friends, to who I'm appreciative for" " their support:\nIlya Korsak\nMaxim Fadeev\n\n" "For all questions, please contact me:\n" "m@@scratko.xyz"); }