#include "pch.h" #include "app.h" #include "node_dialog_open.h" #include "node_dialog_browse.h" #include "node_dialog_cloud.h" std::shared_ptr App::show_progress(const std::string& title) { auto pb = std::make_shared(); pb->m_manager = &layout; pb->init(); pb->create(); pb->loaded(); pb->m_progress->SetWidthP(0); pb->m_title->set_text(title.c_str()); layout[main_id]->add_child(pb); return pb; } void App::dialog_newdoc() { auto show_dialog = [this] { async_start(); auto dialog = std::make_shared(); dialog->m_manager = &layout; dialog->init(); dialog->create(); dialog->loaded(); dialog->input->set_text("name"); layout[main_id]->add_child(dialog); layout[main_id]->update(); App::I.showKeyboard(); dialog->btn_ok->on_click = [this, dialog](Node*) { std::string name = dialog->input->m_string; std::string path = data_path + "/" + name + ".ppi"; auto action = [this, dialog, name] { std::array resolutions{ 512, 1024, 1536, 2048 }; int res = resolutions[dialog->m_resolution->m_current_index]; doc_name = name; layers->clear(); canvas->m_canvas->m_layers.clear(); canvas->m_canvas->m_order.clear(); canvas->m_canvas->resize(res, res); canvas->reset_camera(); ActionManager::clear(); canvas->m_canvas->layer_add("Default"); layers->add_layer("Default"); title_update(); dialog->destroy(); App::I.hideKeyboard(); }; if (Asset::exist(path, false)) { // ask confirm is file already exist auto msgbox = new NodeMessageBox(); msgbox->m_manager = &layout; msgbox->init(); msgbox->m_title->set_text("Warning"); msgbox->m_message->set_text("A document with this name already exists, continue?"); msgbox->btn_ok->on_click = [this, msgbox, action](Node*) { action(); msgbox->destroy(); }; layout[main_id]->add_child(msgbox); } else { action(); } }; dialog->btn_cancel->on_click = [this, dialog](Node*) { dialog->destroy(); App::I.hideKeyboard(); }; async_end(); }; if (canvas) { if (ui::Canvas::I->m_unsaved) { auto m = layout[main_id]->add_child(); m->m_title->set_text("Unsaved document"); m->m_message->set_text("Would you like to save this document before closing?"); m->btn_ok->m_text->set_text("Yes"); m->btn_cancel->m_text->set_text("No"); m->btn_ok->on_click = [this, m, show_dialog](Node*) { ui::Canvas::I->project_save([this, m, show_dialog] { show_dialog(); }); m->destroy(); }; m->btn_cancel->on_click = [this, m, show_dialog](Node*) { show_dialog(); m->destroy(); }; } else { show_dialog(); } } } void App::dialog_open() { auto show_dialog = [this] { async_start(); // load thumbnail test auto dialog = std::make_shared(); dialog->m_manager = &layout; dialog->data_path = data_path; dialog->init(); dialog->create(); dialog->loaded(); layout[main_id]->add_child(dialog); layout[main_id]->update(); dialog->btn_ok->on_click = [this, dialog](Node*) { canvas->reset_camera(); layers->clear(); doc_name = dialog->selected_name; canvas->m_canvas->project_open(dialog->selected_path, [this] { // on complete async_start(); title_update(); for (auto& i : canvas->m_canvas->m_order) layers->add_layer(canvas->m_canvas->m_layers[i].m_name.c_str()); async_end(); }); dialog->destroy(); ActionManager::clear(); }; async_end(); }; if (canvas) { if (ui::Canvas::I->m_unsaved) { auto m = layout[main_id]->add_child(); m->m_title->set_text("Unsaved document"); m->m_message->set_text("Would you like to save this document before closing?"); m->btn_ok->m_text->set_text("Yes"); m->btn_cancel->m_text->set_text("No"); m->btn_ok->on_click = [this,m,show_dialog](Node*){ ui::Canvas::I->project_save([this,m,show_dialog] { show_dialog(); }); m->destroy(); }; m->btn_cancel->on_click = [this,m,show_dialog](Node*) { show_dialog(); m->destroy(); }; } else { show_dialog(); } } } void App::dialog_browse() { auto show_dialog = [this] { async_start(); // load thumbnail test auto dialog = std::make_shared(); dialog->m_manager = &layout; dialog->data_path = data_path; dialog->init(); dialog->create(); dialog->loaded(); layout[main_id]->add_child(dialog); layout[main_id]->update(); dialog->btn_ok->on_click = [this, dialog](Node*) { open_document(dialog->selected_path); dialog->destroy(); }; async_end(); }; if (canvas) { if (ui::Canvas::I->m_unsaved) { auto m = layout[main_id]->add_child(); m->m_title->set_text("Unsaved document"); m->m_message->set_text("Would you like to save this document before closing?"); m->btn_ok->m_text->set_text("Yes"); m->btn_cancel->m_text->set_text("No"); m->btn_ok->on_click = [this, m, show_dialog](Node*) { ui::Canvas::I->project_save([this, m, show_dialog] { show_dialog(); }); m->destroy(); }; m->btn_cancel->on_click = [this, m, show_dialog](Node*) { show_dialog(); m->destroy(); }; } else { show_dialog(); } } } void App::dialog_save_ver() { int current = 0; std::string next = doc_name + ".01"; std::string base = doc_name; std::regex r(R"((.*)\.(\w{2})$)"); std::smatch m; if (std::regex_search(doc_name, m, r)) { base = m[1].str(); current = atoi(m[2].str().c_str()); } for (int i = current + 1; i < 99; i++) { static char tmp_name[256]; sprintf(tmp_name, "%s.%02d", base.c_str(), i); next = tmp_name; if (Asset::exist(data_path + "/" + next + ".ppi", false)) continue; break; } doc_name = next; title_update(); canvas->m_canvas->project_save(data_path + "/" + next + ".ppi"); } void App::dialog_save() { if (canvas) { auto dialog = std::make_shared(); dialog->m_manager = &layout; dialog->init(); dialog->create(); dialog->loaded(); dialog->input->set_text(doc_name); App::I.showKeyboard(); dialog->btn_ok->on_click = [this, dialog](Node*) { std::string name = dialog->input->m_string; std::string path = data_path + "/" + name + ".ppi"; if (name.empty()) { auto msgbox = new NodeMessageBox(); msgbox->m_manager = &layout; msgbox->init(); msgbox->m_title->set_text("Warning"); msgbox->m_message->set_text("You need to specify a name to file."); layout[main_id]->add_child(msgbox); return; } auto action = [this, dialog, name, path] { doc_name = name; title_update(); canvas->m_canvas->project_save(path); dialog->destroy(); App::I.hideKeyboard(); }; if (Asset::exist(path, false)) { // ask confirm is file already exist auto msgbox = new NodeMessageBox(); msgbox->m_manager = &layout; msgbox->init(); msgbox->m_title->set_text("Warning"); msgbox->m_message->set_text(("Are you sure you want to overwrite " + name + "?").c_str()); msgbox->btn_ok->on_click = [this, msgbox, action](Node*) { action(); msgbox->destroy(); }; layout[main_id]->add_child(msgbox); } else { action(); } }; dialog->btn_cancel->on_click = [this, dialog](Node*) { dialog->destroy(); App::I.hideKeyboard(); }; layout[main_id]->add_child(dialog); layout[main_id]->update(); } } void App::dialog_export() { if (canvas) { canvas->m_canvas->export_equirectangular(data_path + "/" + doc_name + ".jpg"); } } void App::dialog_export_cubes() { if (canvas) { canvas->m_canvas->export_cubes(data_path + "/" + doc_name); } } void App::dialog_layer_rename() { auto dialog = std::make_shared(); dialog->m_manager = &layout; dialog->data_path = data_path; dialog->init(); dialog->create(); dialog->loaded(); dialog->input->set_text(layers->m_current_layer->m_label_text); App::I.showKeyboard(); layout[main_id]->add_child(dialog); layout[main_id]->update(); dialog->btn_ok->on_click = [this,dialog](Node*) { layers->m_current_layer->set_name(dialog->get_name().c_str()); canvas->m_canvas->m_layers[canvas->m_canvas->m_current_layer_idx].m_name = dialog->get_name(); dialog->destroy(); App::I.hideKeyboard(); }; dialog->btn_cancel->on_click = [this, dialog](Node*) { dialog->destroy(); App::I.hideKeyboard(); }; popup->mouse_release(); popup->destroy(); }