Centralize legacy document layer bridge

This commit is contained in:
2026-06-03 21:16:07 +02:00
parent 855c388027
commit 7460453b80
8 changed files with 382 additions and 301 deletions

View File

@@ -1,11 +1,11 @@
#include "pch.h"
#include "app.h"
#include "action.h"
#include "app_core/document_layer.h"
#include "app_core/document_resize.h"
#include "app_core/document_export.h"
#include "app_core/document_session.h"
#include "legacy_document_canvas_services.h"
#include "legacy_document_layer_services.h"
#include "legacy_history_services.h"
#include "settings.h"
#include "node_dialog_open.h"
@@ -52,78 +52,6 @@ namespace {
return false;
}
struct LegacyActionLayerRename : public Action
{
std::string m_old_name;
std::string m_new_name;
Layer* m_layer = nullptr;
std::shared_ptr<NodeLayer> m_layer_node;
LegacyActionLayerRename(
std::string old_name,
std::string new_name,
std::shared_ptr<NodeLayer> layer_node,
Layer* layer)
: m_old_name(std::move(old_name))
, m_new_name(std::move(new_name))
, m_layer(layer)
, m_layer_node(std::move(layer_node))
{
}
void run() override { }
size_t memory() override { return 0; }
void undo() override
{
if (m_layer_node)
m_layer_node->set_name(m_old_name.c_str());
if (m_layer)
m_layer->m_name = m_old_name;
}
Action* get_redo() override
{
return new LegacyActionLayerRename(m_new_name, m_old_name, m_layer_node, m_layer);
}
};
class LegacyDocumentLayerRenameServices final : public pp::app::DocumentLayerRenameServices {
public:
LegacyDocumentLayerRenameServices(App& app, const std::shared_ptr<NodeDialogLayerRename>& dialog) noexcept
: app_(app)
, dialog_(dialog)
{
}
void rename_layer(std::string_view old_name, std::string_view new_name) override
{
if (!app_.layers || !app_.layers->m_current_layer || !app_.canvas || !app_.canvas->m_canvas)
return;
auto layer_node = std::static_pointer_cast<NodeLayer>(app_.layers->m_current_layer->shared_from_this());
auto* layer = app_.canvas->m_canvas->m_layers[app_.canvas->m_canvas->m_current_layer_idx].get();
const std::string old_name_copy(old_name);
const std::string new_name_copy(new_name);
ActionManager::add(new LegacyActionLayerRename(
old_name_copy,
new_name_copy,
layer_node,
layer));
layer_node->set_name(new_name_copy.c_str());
layer->m_name = new_name_copy;
}
void finish_layer_rename() override
{
if (dialog_)
dialog_->destroy();
app_.hideKeyboard();
}
private:
App& app_;
std::shared_ptr<NodeDialogLayerRename> dialog_;
};
}
std::shared_ptr<NodeProgressBar> App::show_progress(const std::string& title, int total /*= 0*/)
@@ -683,8 +611,7 @@ void App::dialog_layer_rename()
const auto plan = pp::app::plan_document_layer_rename(old_name, dialog->get_name());
if (!plan)
return;
LegacyDocumentLayerRenameServices services(*this, dialog);
const auto status = pp::app::execute_document_layer_rename_plan(plan.value(), services);
const auto status = pp::panopainter::execute_legacy_document_layer_rename_plan(*this, plan.value(), dialog);
if (!status.ok())
LOG("Layer rename failed: %s", status.message);
};