Centralize legacy new document bridge

This commit is contained in:
2026-06-04 13:38:52 +02:00
parent 4528edfb2c
commit 8a0810acb3
8 changed files with 179 additions and 46 deletions

View File

@@ -3,10 +3,74 @@
#include "legacy_document_session_services.h"
#include "app.h"
#include "legacy_history_services.h"
#include "node_dialog_open.h"
#include <utility>
namespace pp::panopainter {
namespace {
void create_legacy_new_document(
App& app,
const pp::app::NewDocumentPlan& plan,
const std::shared_ptr<NodeDialogNewDoc>& dialog)
{
app.doc_name = plan.target.name;
app.doc_path = plan.target.path;
app.doc_filename = plan.target.name + ".ppi";
app.doc_dir = plan.target.directory;
app.layers->clear();
app.canvas->m_canvas->m_layers.clear();
app.canvas->m_canvas->resize(plan.resolution, plan.resolution);
app.canvas->reset_camera();
pp::panopainter::clear_legacy_history();
app.layers->add_layer("Default", false, true);
app.canvas->m_canvas->m_unsaved = true;
app.canvas->m_canvas->m_newdoc = false;
app.title_update();
dialog->destroy();
App::I->hideKeyboard();
}
class LegacyNewDocumentServices final : public pp::app::NewDocumentServices {
public:
LegacyNewDocumentServices(App& app, std::shared_ptr<NodeDialogNewDoc> dialog) noexcept
: app_(app)
, dialog_(std::move(dialog))
{
}
void create_new_document(const pp::app::NewDocumentPlan& plan) override
{
create_legacy_new_document(app_, plan, dialog_);
}
void prompt_overwrite_new_document(const pp::app::NewDocumentPlan& plan) override
{
auto msgbox = new NodeMessageBox();
msgbox->set_manager(&app_.layout);
msgbox->init();
msgbox->m_title->set_text("Warning");
msgbox->m_message->set_text("A document with this name already exists, continue?");
auto* app = &app_;
auto dialog = dialog_;
msgbox->btn_ok->on_click = [app, msgbox, dialog, plan](Node*) {
create_legacy_new_document(*app, plan, dialog);
msgbox->destroy();
};
app_.layout[app_.main_id]->add_child(msgbox);
}
private:
App& app_;
std::shared_ptr<NodeDialogNewDoc> dialog_;
};
class LegacyCloseRequestServices final : public pp::app::CloseRequestServices {
public:
LegacyCloseRequestServices(App& app, bool& dialog_already_opened) noexcept
@@ -140,4 +204,13 @@ pp::foundation::Status execute_legacy_document_workflow_decision(
return pp::app::execute_document_workflow_decision(decision, services);
}
pp::foundation::Status execute_legacy_new_document_plan(
App& app,
const pp::app::NewDocumentPlan& plan,
std::shared_ptr<NodeDialogNewDoc> dialog)
{
LegacyNewDocumentServices services(app, std::move(dialog));
return pp::app::execute_new_document_plan(plan, services);
}
} // namespace pp::panopainter