Extract layer rename dialog and brush preset registry shells

This commit is contained in:
2026-06-16 23:46:08 +02:00
parent 42bae9db16
commit cb9751dcc7
9 changed files with 91 additions and 68 deletions

View File

@@ -1,11 +1,8 @@
#include "pch.h"
#include "app.h"
#include "app_core/app_dialog.h"
#include "app_core/document_layer.h"
#include "legacy_app_dialog_services.h"
#include "legacy_document_layer_services.h"
#include "legacy_ui_overlay_services.h"
#include "node_dialog_layer_rename.h"
#ifdef __QUEST__
#include "oculus_vr.h"
@@ -25,6 +22,7 @@ void open_changelog_dialog(App& app);
void open_about_dialog(App& app);
void open_whatsnew_dialog(App& app, bool force_show);
void open_shortcuts_dialog(App& app);
void open_legacy_document_layer_rename_dialog(App& app);
}
std::shared_ptr<NodeProgressBar> App::show_progress(const std::string& title, int total /*= 0*/)
@@ -95,46 +93,7 @@ void App::dialog_export_cube_faces()
void App::dialog_layer_rename()
{
auto* overlay_anchor = layout[main_id];
if (!overlay_anchor) {
LOG("Layer rename dialog open failed: main layout anchor is missing");
return;
}
auto dialog = pp::panopainter::make_legacy_overlay_node<NodeDialogLayerRename>(*this);
dialog->input->set_text(layers->m_current_layer->m_label_text);
App::I->showKeyboard();
const auto overlay = pp::panopainter::open_legacy_overlay_node_with_handle(*overlay_anchor, dialog);
if (!overlay) {
App::I->hideKeyboard();
LOG("Layer rename dialog open failed: %s", overlay.status().message);
return;
}
const auto overlay_handle = overlay.value();
const auto close_dialog = [this, overlay_anchor, overlay_handle]() {
const auto close_status =
pp::panopainter::close_legacy_overlay_node(*overlay_anchor, overlay_handle);
(void)close_status;
App::I->hideKeyboard();
};
dialog->btn_ok->on_click = [this,dialog](Node*)
{
const auto old_name = layers->m_current_layer->m_label_text;
const auto plan = pp::app::plan_document_layer_rename(old_name, dialog->get_name());
if (!plan)
return;
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);
};
dialog->btn_cancel->on_click = [close_dialog](Node*)
{
close_dialog();
};
pp::panopainter::open_legacy_document_layer_rename_dialog(*this);
}
void App::dialog_preset_download()

View File

@@ -7,6 +7,27 @@
namespace pp::panopainter {
namespace {
std::vector<NodePanelBrushPreset*> s_legacy_brush_preset_panels;
}
void register_legacy_brush_preset_panel(NodePanelBrushPreset& panel)
{
s_legacy_brush_preset_panels.push_back(&panel);
}
void unregister_legacy_brush_preset_panel(NodePanelBrushPreset& panel)
{
s_legacy_brush_preset_panels.erase(
std::remove(s_legacy_brush_preset_panels.begin(), s_legacy_brush_preset_panels.end(), &panel),
s_legacy_brush_preset_panels.end());
}
const std::vector<NodePanelBrushPreset*>& legacy_brush_preset_panels()
{
return s_legacy_brush_preset_panels;
}
LegacyBrushPresetListServices::LegacyBrushPresetListServices(NodePanelBrushPreset& owner)
: owner_(owner)
{
@@ -21,7 +42,7 @@ pp::foundation::Status LegacyBrushPresetListServices::add_current_brush_preset(i
return pp::foundation::Status::invalid_argument("current brush must be available to add a preset");
}
for (auto p : NodePanelBrushPreset::s_panels) {
for (auto p : legacy_brush_preset_panels()) {
p->add_brush(std::make_shared<Brush>(*Canvas::I->m_current_brush));
}
return pp::foundation::Status::success();
@@ -33,7 +54,7 @@ void LegacyBrushPresetListServices::remove_brush_preset(
bool selects_target,
bool clears_selection)
{
for (auto p : NodePanelBrushPreset::s_panels) {
for (auto p : legacy_brush_preset_panels()) {
if (current_index < 0 || current_index >= static_cast<int>(p->m_container->m_children.size())) {
continue;
}
@@ -51,7 +72,7 @@ void LegacyBrushPresetListServices::remove_brush_preset(
void LegacyBrushPresetListServices::move_brush_preset(int from_index, int to_index)
{
for (auto p : NodePanelBrushPreset::s_panels) {
for (auto p : legacy_brush_preset_panels()) {
if (from_index >= 0 && from_index < static_cast<int>(p->m_container->m_children.size())) {
p->m_container->move_child(p->m_container->m_children[from_index].get(), to_index);
}
@@ -60,7 +81,7 @@ void LegacyBrushPresetListServices::move_brush_preset(int from_index, int to_ind
void LegacyBrushPresetListServices::select_brush_preset(int index, bool notify_brush_changed)
{
for (auto p : NodePanelBrushPreset::s_panels) {
for (auto p : legacy_brush_preset_panels()) {
if (p->m_current) {
p->m_current->m_selected = false;
}
@@ -75,7 +96,7 @@ void LegacyBrushPresetListServices::select_brush_preset(int index, bool notify_b
void LegacyBrushPresetListServices::clear_brush_presets(bool clears_selection)
{
for (auto p : NodePanelBrushPreset::s_panels) {
for (auto p : legacy_brush_preset_panels()) {
p->m_container->remove_all_children();
if (clears_selection) {
p->m_current = nullptr;
@@ -85,7 +106,7 @@ void LegacyBrushPresetListServices::clear_brush_presets(bool clears_selection)
void LegacyBrushPresetListServices::update_preset_empty_notification()
{
for (auto p : NodePanelBrushPreset::s_panels) {
for (auto p : legacy_brush_preset_panels()) {
p->m_notification->SetVisibility(p->m_container->m_children.size() == 0);
}
}

View File

@@ -5,6 +5,10 @@
namespace pp::panopainter {
void register_legacy_brush_preset_panel(NodePanelBrushPreset& panel);
void unregister_legacy_brush_preset_panel(NodePanelBrushPreset& panel);
const std::vector<NodePanelBrushPreset*>& legacy_brush_preset_panels();
class LegacyBrushPresetListServices final : public pp::app::BrushPresetListServices {
public:
explicit LegacyBrushPresetListServices(NodePanelBrushPreset& owner);

View File

@@ -1,6 +1,7 @@
#include "pch.h"
#include "legacy_brush_preset_services.h"
#include "legacy_brush_preset_list_services.h"
#include "abr.h"
#include "app.h"
@@ -84,6 +85,7 @@ bool LegacyBrushPresetServices::restore()
owner_.add_brush(b);
}
}
owner_.m_notification->SetVisibility(owner_.m_container->m_children.size() == 0);
return true;
}
return false;
@@ -350,7 +352,7 @@ bool LegacyBrushPresetServices::import_ppbr(const std::string& path)
App::I->ui_task([owner, brushes_to_add = std::move(brushes_to_add), pb]() mutable {
for (const auto& b : brushes_to_add)
{
for (auto p : NodePanelBrushPreset::s_panels)
for (auto p : legacy_brush_preset_panels())
p->add_brush(b);
}
@@ -439,7 +441,7 @@ bool LegacyBrushPresetServices::import_abr(const std::string& path)
if (b->valid())
{
LOG("add preset %s", b->m_name.c_str());
for (auto p : NodePanelBrushPreset::s_panels)
for (auto p : legacy_brush_preset_panels())
p->add_brush(b);
}
pb->increment();

View File

@@ -6,6 +6,7 @@
#include "app.h"
#include "legacy_document_canvas_services.h"
#include "legacy_ui_overlay_services.h"
#include "node_dialog_layer_rename.h"
namespace pp::panopainter {
namespace {
@@ -313,6 +314,50 @@ pp::foundation::Status execute_legacy_document_layer_rename_plan(
return pp::app::execute_document_layer_rename_plan(plan, services);
}
void open_legacy_document_layer_rename_dialog(App& app)
{
auto* overlay_anchor = app.layout[app.main_id];
if (!overlay_anchor) {
LOG("Layer rename dialog open failed: main layout anchor is missing");
return;
}
auto dialog = pp::panopainter::make_legacy_overlay_node<NodeDialogLayerRename>(app);
dialog->input->set_text(app.layers->m_current_layer->m_label_text);
app.showKeyboard();
const auto overlay = pp::panopainter::open_legacy_overlay_node_with_handle(*overlay_anchor, dialog);
if (!overlay) {
app.hideKeyboard();
LOG("Layer rename dialog open failed: %s", overlay.status().message);
return;
}
const auto overlay_handle = overlay.value();
const auto close_dialog = [&app, overlay_anchor, overlay_handle]() {
const auto close_status =
pp::panopainter::close_legacy_overlay_node(*overlay_anchor, overlay_handle);
(void)close_status;
app.hideKeyboard();
};
dialog->btn_ok->on_click = [&app, dialog](Node*)
{
const auto old_name = app.layers->m_current_layer->m_label_text;
const auto plan = pp::app::plan_document_layer_rename(old_name, dialog->get_name());
if (!plan)
return;
const auto status = pp::panopainter::execute_legacy_document_layer_rename_plan(app, plan.value(), dialog);
if (!status.ok())
LOG("Layer rename failed: %s", status.message);
};
dialog->btn_cancel->on_click = [close_dialog](Node*)
{
close_dialog();
};
}
pp::foundation::Status execute_legacy_document_layer_menu_plan(
App& app,
const pp::app::DocumentLayerMenuPlan& plan)

View File

@@ -15,6 +15,7 @@ namespace pp::panopainter {
App& app,
const pp::app::DocumentLayerRenamePlan& plan,
const std::shared_ptr<NodeDialogLayerRename>& dialog);
void open_legacy_document_layer_rename_dialog(App& app);
[[nodiscard]] pp::foundation::Status execute_legacy_document_layer_menu_plan(
App& app,
const pp::app::DocumentLayerMenuPlan& plan);

View File

@@ -116,8 +116,6 @@ void NodePanelBrush::added(Node* parent)
// -----------------------------------------------------------------------
std::vector<NodePanelBrushPreset*> NodePanelBrushPreset::s_panels;
Node* NodeBrushPresetItem::clone_instantiate() const
{
return pp::panopainter::clone_legacy_brush_preset_item(*this);
@@ -135,12 +133,12 @@ void NodeBrushPresetItem::draw()
NodePanelBrushPreset::NodePanelBrushPreset()
{
s_panels.push_back(this);
pp::panopainter::register_legacy_brush_preset_panel(*this);
}
NodePanelBrushPreset::~NodePanelBrushPreset()
{
s_panels.erase(std::remove(s_panels.begin(), s_panels.end(), this));
pp::panopainter::unregister_legacy_brush_preset_panel(*this);
}
//---
@@ -150,9 +148,6 @@ Node* NodePanelBrushPreset::clone_instantiate() const
return new NodePanelBrushPreset();
}
namespace pp::panopainter {
} // namespace pp::panopainter
void NodePanelBrushPreset::execute_preset_list_plan(const pp::app::BrushPresetListPlan& plan)
{
pp::panopainter::LegacyBrushPresetListServices services(*this);
@@ -184,11 +179,7 @@ bool NodePanelBrushPreset::save()
bool NodePanelBrushPreset::restore()
{
const auto ok = pp::panopainter::LegacyBrushPresetServices(*this).restore();
if (ok) {
m_notification->SetVisibility(m_container->m_children.size() == 0);
}
return ok;
return pp::panopainter::LegacyBrushPresetServices(*this).restore();
}
void NodePanelBrushPreset::add_brush(std::shared_ptr<Brush> brush)

View File

@@ -96,8 +96,6 @@ class NodePanelBrushPreset : public Node
friend class pp::panopainter::LegacyBrushPresetPanelUi;
friend class pp::panopainter::LegacyBrushPresetListServices;
friend class pp::panopainter::LegacyBrushPresetServices;
static std::vector<NodePanelBrushPreset*> s_panels;
bool m_interacted = false;
NodeBrushPresetItem* m_current = nullptr;
NodeButtonCustom* m_btn_add;