Dispatch layer rename through app core
This commit is contained in:
@@ -50,6 +50,78 @@ 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*/)
|
||||
@@ -637,45 +709,10 @@ void App::dialog_layer_rename()
|
||||
const auto plan = pp::app::plan_document_layer_rename(old_name, dialog->get_name());
|
||||
if (!plan)
|
||||
return;
|
||||
if (plan.value().action == pp::app::DocumentLayerRenameAction::no_op_same_name)
|
||||
{
|
||||
dialog->destroy();
|
||||
App::I->hideKeyboard();
|
||||
return;
|
||||
}
|
||||
|
||||
struct ActionLayerRename : public Action
|
||||
{
|
||||
std::string m_old_name;
|
||||
std::string m_new_name;
|
||||
bool m_unsaved;
|
||||
Layer* m_layer;
|
||||
std::shared_ptr<NodeLayer> m_layer_node;
|
||||
ActionLayerRename(std::string old_name, std::string new_name, std::shared_ptr<NodeLayer> layer_node, Layer* layer) :
|
||||
m_old_name(old_name), m_new_name(new_name), m_layer_node(layer_node), m_layer(layer) { }
|
||||
virtual void run() override { }
|
||||
virtual size_t memory() override { return 0; }
|
||||
virtual void undo() override
|
||||
{
|
||||
m_layer_node->set_name(m_old_name.c_str());
|
||||
m_layer->m_name = m_old_name;
|
||||
}
|
||||
virtual Action* get_redo() override
|
||||
{
|
||||
return new ActionLayerRename(m_new_name, m_old_name, m_layer_node, m_layer);
|
||||
}
|
||||
};
|
||||
auto layer_node = std::static_pointer_cast<NodeLayer>(layers->m_current_layer->shared_from_this());
|
||||
auto* layer = canvas->m_canvas->m_layers[canvas->m_canvas->m_current_layer_idx].get();
|
||||
ActionManager::add(new ActionLayerRename(
|
||||
plan.value().old_name,
|
||||
plan.value().new_name,
|
||||
layer_node,
|
||||
layer));
|
||||
layer_node->set_name(plan.value().new_name.c_str());
|
||||
layer->m_name = plan.value().new_name;
|
||||
dialog->destroy();
|
||||
App::I->hideKeyboard();
|
||||
LegacyDocumentLayerRenameServices services(*this, dialog);
|
||||
const auto status = pp::app::execute_document_layer_rename_plan(plan.value(), services);
|
||||
if (!status.ok())
|
||||
LOG("Layer rename failed: %s", status.message);
|
||||
};
|
||||
dialog->btn_cancel->on_click = [this, dialog](Node*)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user