Centralize retained UI overlay insertion

This commit is contained in:
2026-06-06 09:55:02 +02:00
parent 3101e65dd3
commit 59c9b05d6c
9 changed files with 118 additions and 83 deletions

View File

@@ -11,6 +11,7 @@
#include "legacy_document_export_services.h"
#include "legacy_document_layer_services.h"
#include "legacy_document_session_services.h"
#include "legacy_ui_overlay_services.h"
#include "settings.h"
#include "node_dialog_open.h"
#include "node_dialog_browse.h"
@@ -147,35 +148,17 @@ std::shared_ptr<NodeInputBox> App::input_box(const std::string& title,
void App::dialog_usermanual()
{
auto dialog = std::make_shared<NodeUserManual>();
dialog->set_manager(&layout);
dialog->init();
dialog->create();
dialog->loaded();
layout[main_id]->add_child(dialog);
(void)pp::panopainter::add_legacy_overlay_node<NodeUserManual>(*this);
}
void App::dialog_changelog()
{
auto dialog = std::make_shared<NodeChangelog>();
dialog->set_manager(&layout);
dialog->init();
dialog->create();
dialog->loaded();
layout[main_id]->add_child(dialog);
(void)pp::panopainter::add_legacy_overlay_node<NodeChangelog>(*this);
}
void App::dialog_about()
{
auto dialog = std::make_shared<NodeAbout>();
dialog->set_manager(&layout);
dialog->init();
dialog->create();
dialog->loaded();
layout[main_id]->add_child(dialog);
(void)pp::panopainter::add_legacy_overlay_node<NodeAbout>(*this);
}
void App::continue_document_workflow_after_optional_save(std::function<void()> action)
@@ -194,14 +177,10 @@ void App::continue_document_workflow_after_optional_save(std::function<void()> a
void App::dialog_newdoc()
{
auto show_dialog = [this] {
auto dialog = std::make_shared<NodeDialogNewDoc>();
dialog->set_manager(&layout);
dialog->init();
dialog->create();
dialog->loaded();
auto dialog = pp::panopainter::make_legacy_overlay_node<NodeDialogNewDoc>(*this);
dialog->input->set_text("name");
layout[main_id]->add_child(dialog);
(void)pp::panopainter::attach_legacy_overlay_node(*this, dialog);
App::I->showKeyboard();
@@ -245,13 +224,9 @@ void App::dialog_open()
{
auto show_dialog = [this] {
// load thumbnail test
auto dialog = std::make_shared<NodeDialogOpen>();
dialog->set_manager(&layout);
dialog->init();
dialog->create();
dialog->loaded();
auto dialog = pp::panopainter::make_legacy_overlay_node<NodeDialogOpen>(*this);
layout[main_id]->add_child(dialog);
(void)pp::panopainter::attach_legacy_overlay_node(*this, dialog);
dialog->btn_ok->on_click = [this, dialog](Node*)
{
@@ -279,13 +254,10 @@ void App::dialog_browse()
auto show_dialog = [this] {
// load thumbnail test
auto dialog = std::make_shared<NodeDialogBrowse>();
dialog->set_manager(&layout);
dialog->search_paths = document_browse_roots();
dialog->init();
dialog->create();
dialog->loaded();
pp::panopainter::initialize_legacy_overlay_node(*this, *dialog);
layout[main_id]->add_child(dialog);
(void)pp::panopainter::attach_legacy_overlay_node(*this, dialog);
dialog->btn_ok->on_click = [this, dialog](Node*)
{
@@ -345,11 +317,7 @@ void App::dialog_save()
if (canvas)
{
auto dialog = std::make_shared<NodeDialogSave>();
dialog->set_manager(&layout);
dialog->init();
dialog->create();
dialog->loaded();
auto dialog = pp::panopainter::make_legacy_overlay_node<NodeDialogSave>(*this);
dialog->input->set_text(doc_name);
App::I->showKeyboard();
@@ -379,7 +347,7 @@ void App::dialog_save()
App::I->hideKeyboard();
};
layout[main_id]->add_child(dialog);
(void)pp::panopainter::attach_legacy_overlay_node(*this, dialog);
}
}
@@ -442,13 +410,9 @@ void App::dialog_export_depth()
void App::dialog_resize()
{
auto dialog = std::make_shared<NodeDialogResize>();
dialog->set_manager(&layout);
dialog->init();
dialog->create();
dialog->loaded();
auto dialog = pp::panopainter::make_legacy_overlay_node<NodeDialogResize>(*this);
layout[main_id]->add_child(dialog);
(void)pp::panopainter::attach_legacy_overlay_node(*this, dialog);
dialog->btn_ok->on_click = [this,dialog](Node*)
{
@@ -481,16 +445,12 @@ void App::dialog_export_cube_faces()
void App::dialog_layer_rename()
{
auto dialog = std::make_shared<NodeDialogLayerRename>();
dialog->set_manager(&layout);
dialog->init();
dialog->create();
dialog->loaded();
auto dialog = pp::panopainter::make_legacy_overlay_node<NodeDialogLayerRename>(*this);
dialog->input->set_text(layers->m_current_layer->m_label_text);
App::I->showKeyboard();
layout[main_id]->add_child(dialog);
(void)pp::panopainter::attach_legacy_overlay_node(*this, dialog);
dialog->btn_ok->on_click = [this,dialog](Node*)
{
@@ -516,8 +476,7 @@ void App::dialog_preset_download()
void App::dialog_ppbr_export()
{
auto root = layout[main_id];
auto dialog = root->add_child_ref<NodeDialogExportPPBR>();
auto dialog = pp::panopainter::add_legacy_overlay_node<NodeDialogExportPPBR>(*this);
dialog->btn_ok->on_click = [this, dialog] (Node*) {
const auto request = pp::panopainter::make_legacy_brush_package_export_request(*dialog);
@@ -662,7 +621,7 @@ void App::dialog_export_mp4()
void App::dialog_whatsnew(bool force_show)
{
auto whatsnew = std::make_shared<NodeRemotePage>();
whatsnew->m_manager = &layout;
whatsnew->set_manager(&layout);
whatsnew->init();
std::string url = fmt::format("https://panopainter.com/app-content/whatsnew/?version={}", g_version_build);
whatsnew->load_url(url, [this, whatsnew, force_show](bool success) {
@@ -673,7 +632,7 @@ void App::dialog_whatsnew(bool force_show)
{
whatsnew->set_title(fmt::format("What's new in version {}", g_version_number));
if (!force_show)
layout[main_id]->add_child(whatsnew);
(void)pp::panopainter::attach_legacy_overlay_node(*this, whatsnew);
}
}
});
@@ -691,10 +650,10 @@ void App::dialog_whatsnew(bool force_show)
whatsnew->destroy();
});
if (force_show)
layout[main_id]->add_child(whatsnew);
(void)pp::panopainter::attach_legacy_overlay_node(*this, whatsnew);
}
void App::dialog_shortcuts()
{
layout[main_id]->add_child<NodeShortcuts>();
(void)pp::panopainter::add_legacy_overlay_node<NodeShortcuts>(*this);
}

View File

@@ -2,6 +2,7 @@
#include "legacy_app_dialog_services.h"
#include "app.h"
#include "legacy_ui_overlay_services.h"
#include "node_input_box.h"
#include "node_message_box.h"
#include "node_progress_bar.h"
@@ -12,16 +13,12 @@ std::shared_ptr<NodeProgressBar> create_legacy_app_progress_dialog(
App& app,
const pp::app::AppProgressDialogPlan& plan)
{
auto progress = std::make_shared<NodeProgressBar>();
progress->set_manager(&app.layout);
progress->init();
progress->create();
progress->loaded();
auto progress = make_legacy_overlay_node<NodeProgressBar>(app);
progress->m_progress->SetWidthP(plan.progress_fraction);
progress->m_title->set_text(plan.title.c_str());
progress->m_total = plan.total;
progress->m_count = plan.count;
app.layout[app.main_id]->add_child(progress);
(void)attach_legacy_overlay_node(app, progress);
return progress;
}
@@ -29,11 +26,7 @@ std::shared_ptr<NodeMessageBox> create_legacy_app_message_dialog(
App& app,
const pp::app::AppMessageDialogPlan& plan)
{
auto message = std::make_shared<NodeMessageBox>();
message->set_manager(&app.layout);
message->init();
message->create();
message->loaded();
auto message = make_legacy_overlay_node<NodeMessageBox>(app);
message->m_title->set_text(plan.title.c_str());
message->m_message->set_text(plan.message.c_str());
message->btn_ok->m_text->set_text(plan.ok_caption.c_str());
@@ -41,7 +34,7 @@ std::shared_ptr<NodeMessageBox> create_legacy_app_message_dialog(
message->btn_cancel->m_text->set_text(plan.cancel_caption.c_str());
else
message->btn_cancel->destroy();
app.layout[app.main_id]->add_child(message);
(void)attach_legacy_overlay_node(app, message);
return message;
}
@@ -49,15 +42,11 @@ std::shared_ptr<NodeInputBox> create_legacy_app_input_dialog(
App& app,
const pp::app::AppInputDialogPlan& plan)
{
auto input = std::make_shared<NodeInputBox>();
input->set_manager(&app.layout);
input->init();
input->create();
input->loaded();
auto input = make_legacy_overlay_node<NodeInputBox>(app);
input->m_title->set_text(plan.title.c_str());
input->m_field_name->set_text(plan.field_name.c_str());
input->btn_ok->m_text->set_text(plan.ok_caption.c_str());
app.layout[app.main_id]->add_child(input);
(void)attach_legacy_overlay_node(app, input);
return input;
}

View File

@@ -0,0 +1,34 @@
#include "pch.h"
#include "legacy_ui_overlay_services.h"
#include "app.h"
#include "node.h"
namespace pp::panopainter {
void initialize_legacy_overlay_node(App& app, Node& node)
{
node.set_manager(&app.layout);
node.init();
node.create();
node.loaded();
}
pp::foundation::Status attach_legacy_overlay_node(
App& app,
const std::shared_ptr<Node>& node) noexcept
{
if (!node) {
return pp::foundation::Status::invalid_argument("legacy overlay node is null");
}
auto* root = app.layout[app.main_id];
if (!root) {
return pp::foundation::Status::invalid_argument("legacy overlay root is missing");
}
root->add_child(node);
return pp::foundation::Status::success();
}
} // namespace pp::panopainter

View File

@@ -0,0 +1,34 @@
#pragma once
#include "foundation/result.h"
#include <memory>
class App;
class Node;
namespace pp::panopainter {
void initialize_legacy_overlay_node(App& app, Node& node);
[[nodiscard]] pp::foundation::Status attach_legacy_overlay_node(
App& app,
const std::shared_ptr<Node>& node) noexcept;
template <class T>
std::shared_ptr<T> make_legacy_overlay_node(App& app)
{
auto node = std::make_shared<T>();
initialize_legacy_overlay_node(app, *node);
return node;
}
template <class T>
std::shared_ptr<T> add_legacy_overlay_node(App& app)
{
auto node = make_legacy_overlay_node<T>(app);
(void)attach_legacy_overlay_node(app, node);
return node;
}
} // namespace pp::panopainter