#include "pch.h" #include "app.h" #include "app_core/document_resize.h" #include "legacy_document_open_services.h" #include "legacy_document_canvas_services.h" #include "legacy_document_session_services.h" #include "legacy_ui_overlay_services.h" #include "node_dialog_browse.h" #include "node_dialog_open.h" #include "node_dialog_resize.h" void App::continue_document_workflow_after_optional_save(std::function action) { const bool has_canvas = canvas != nullptr; const bool has_unsaved_changes = has_canvas && Canvas::I->m_unsaved; const auto decision = pp::app::plan_document_workflow(has_canvas, has_unsaved_changes); const auto status = pp::panopainter::execute_legacy_document_workflow_decision( *this, decision, std::move(action)); if (!status.ok()) LOG("Document workflow action failed: %s", status.message); } void App::dialog_newdoc() { auto show_dialog = [this] { pp::panopainter::open_legacy_new_document_dialog(*this); }; continue_document_workflow_after_optional_save(show_dialog); } // DEPRECATED void App::dialog_open() { auto show_dialog = [this] { // load thumbnail test auto* overlay_anchor = layout[main_id]; if (!overlay_anchor) { LOG("Open document dialog open failed: main layout anchor is missing"); return; } auto dialog = pp::panopainter::make_legacy_overlay_node(*this); const auto overlay = pp::panopainter::open_legacy_overlay_node_with_handle(*overlay_anchor, dialog); if (!overlay) { LOG("Open document dialog open failed: %s", overlay.status().message); return; } const auto overlay_handle = overlay.value(); const auto close_dialog = [overlay_anchor, overlay_handle]() { const auto close_status = pp::panopainter::close_legacy_overlay_node(*overlay_anchor, overlay_handle); (void)close_status; }; 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](bool success) { // // 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(); }; dialog->btn_cancel->on_click = [close_dialog](Node*) { close_dialog(); }; }; continue_document_workflow_after_optional_save(show_dialog); } void App::dialog_browse() { auto show_dialog = [this] { auto* overlay_anchor = layout[main_id]; if (!overlay_anchor) { LOG("Browse document dialog open failed: main layout anchor is missing"); return; } auto dialog = pp::panopainter::make_legacy_overlay_node(*this); dialog->search_paths = document_browse_roots(); const auto overlay = pp::panopainter::open_legacy_overlay_node_with_handle(*overlay_anchor, dialog); if (!overlay) { LOG("Browse document dialog open failed: %s", overlay.status().message); return; } const auto overlay_handle = overlay.value(); pp::panopainter::wire_legacy_document_browse_dialog_actions( *this, dialog, *overlay_anchor, overlay_handle); }; continue_document_workflow_after_optional_save(show_dialog); } void App::dialog_save_ver() { if (!check_license()) { message_box("License", "This function is disabled in demo mode."); return; } const auto status = pp::panopainter::execute_legacy_document_version_save_dialog(*this); if (!status.ok()) LOG("Document version save action failed: %s", status.message); } void App::save_document(pp::app::DocumentSaveIntent intent) { const auto decision = pp::app::plan_document_save( Canvas::I->m_newdoc, Canvas::I->m_unsaved, intent); const auto status = pp::panopainter::execute_legacy_document_save_decision(*this, decision); if (!status.ok()) LOG("Document save action failed: %s", status.message); } void App::dialog_save() { if (!check_license()) { message_box("License", "This function is disabled in demo mode."); return; } if (canvas) pp::panopainter::open_legacy_document_file_save_dialog(*this); } void App::dialog_resize() { auto* overlay_anchor = layout[main_id]; if (!overlay_anchor) { LOG("Resize dialog open failed: main layout anchor is missing"); return; } auto dialog = pp::panopainter::make_legacy_overlay_node(*this); const auto overlay = pp::panopainter::open_legacy_overlay_node_with_handle(*overlay_anchor, dialog); if (!overlay) { LOG("Resize dialog open failed: %s", overlay.status().message); return; } const auto overlay_handle = overlay.value(); const auto close_dialog = [overlay_anchor, overlay_handle]() { const auto close_status = pp::panopainter::close_legacy_overlay_node(*overlay_anchor, overlay_handle); (void)close_status; }; dialog->btn_ok->on_click = [this, dialog, close_dialog](Node*) { const auto plan = pp::app::plan_document_resize( dialog->combo ? dialog->combo->m_current_index : 0); if (!plan) { close_dialog(); return; } const auto status = pp::panopainter::execute_legacy_document_resize_plan(*this, plan.value()); if (!status.ok()) LOG("Document resize failed: %s", status.message); close_dialog(); }; dialog->btn_cancel->on_click = [close_dialog](Node*) { close_dialog(); }; }