Add main toolbar service boundary

This commit is contained in:
2026-06-03 12:42:23 +02:00
parent 62561624ed
commit fb111dcdc9
5 changed files with 218 additions and 32 deletions

View File

@@ -249,6 +249,74 @@ void apply_tools_panel_chrome(NodePanelFloating& panel, const pp::app::ToolsPane
panel.m_droppable = plan.droppable;
}
class LegacyMainToolbarServices final : public pp::app::MainToolbarServices {
public:
explicit LegacyMainToolbarServices(App& app) noexcept
: app_(app)
{
}
void show_open_dialog() override
{
app_.dialog_open();
}
void show_save_dialog() override
{
app_.dialog_save();
}
void invoke_undo() override
{
ActionManager::undo();
}
void invoke_redo() override
{
ActionManager::redo();
}
void clear_history() override
{
ActionManager::clear();
}
void clear_canvas() override
{
if (!app_.canvas || !app_.canvas->m_canvas)
return;
app_.canvas->m_canvas->clear({ 0.0F, 0.0F, 0.0F, 0.0F });
}
void show_message_box() override
{
app_.msgbox = new NodeMessageBox();
app_.msgbox->set_manager(&app_.layout);
app_.msgbox->init();
app_.layout[app_.main_id]->add_child(app_.msgbox);
}
void show_settings_dialog() override
{
app_.settings = new NodeSettings();
app_.settings->set_manager(&app_.layout);
app_.settings->init();
app_.layout[app_.main_id]->add_child(app_.settings);
}
private:
App& app_;
};
void execute_main_toolbar_plan(App& app, const pp::app::MainToolbarPlan& plan)
{
LegacyMainToolbarServices services(app);
const auto status = pp::app::execute_main_toolbar_plan(plan, services);
if (!status.ok())
LOG("Main toolbar action failed: %s", status.message);
}
} // namespace
void App::title_update()
@@ -284,8 +352,8 @@ void App::init_toolbar_main()
button->on_click = [this, button](Node*) {
const auto plan = pp::app::plan_main_toolbar_command(
pp::app::MainToolbarCommand::open_document);
if (plan && plan.value().action == pp::app::MainToolbarAction::show_open_dialog)
dialog_open();
if (plan)
execute_main_toolbar_plan(*this, plan.value());
};
}
if (auto* button = layout[main_id]->find<NodeButton>("btn-save"))
@@ -293,8 +361,8 @@ void App::init_toolbar_main()
button->on_click = [this, button](Node*) {
const auto plan = pp::app::plan_main_toolbar_command(
pp::app::MainToolbarCommand::save_document);
if (plan && plan.value().action == pp::app::MainToolbarAction::show_save_dialog)
dialog_save();
if (plan)
execute_main_toolbar_plan(*this, plan.value());
};
}
if (auto* button = layout[main_id]->find<NodeButtonCustom>("btn-undo"))
@@ -303,8 +371,8 @@ void App::init_toolbar_main()
const auto plan = pp::app::plan_main_toolbar_command(
pp::app::MainToolbarCommand::undo,
static_cast<int>(ActionManager::I.m_actions.size()));
if (plan && plan.value().action == pp::app::MainToolbarAction::invoke_undo)
ActionManager::undo();
if (plan)
execute_main_toolbar_plan(*this, plan.value());
};
}
if (auto* button = layout[main_id]->find<NodeButtonCustom>("btn-redo"))
@@ -314,8 +382,8 @@ void App::init_toolbar_main()
pp::app::MainToolbarCommand::redo,
0,
static_cast<int>(ActionManager::I.m_redos.size()));
if (plan && plan.value().action == pp::app::MainToolbarAction::invoke_redo)
ActionManager::redo();
if (plan)
execute_main_toolbar_plan(*this, plan.value());
};
}
if (auto* button = layout[main_id]->find<NodeButtonCustom>("btn-clean-memory"))
@@ -326,8 +394,8 @@ void App::init_toolbar_main()
static_cast<int>(ActionManager::I.m_actions.size()),
static_cast<int>(ActionManager::I.m_redos.size()),
static_cast<int>(ActionManager::I.m_memory));
if (plan && plan.value().action == pp::app::MainToolbarAction::clear_history)
ActionManager::clear();
if (plan)
execute_main_toolbar_plan(*this, plan.value());
};
}
if (auto* button = layout[main_id]->find<NodeButton>("btn-clear"))
@@ -340,12 +408,8 @@ void App::init_toolbar_main()
0,
0,
static_cast<bool>(canvas));
if (plan && plan.value().action == pp::app::MainToolbarAction::clear_canvas)
canvas->m_canvas->clear({
0.0F,
0.0F,
0.0F,
0.0F });
if (plan)
execute_main_toolbar_plan(*this, plan.value());
};
}
if (auto* button = layout[main_id]->find<NodeButton>("btn-popup"))
@@ -353,12 +417,8 @@ void App::init_toolbar_main()
button->on_click = [this](Node*) {
const auto plan = pp::app::plan_main_toolbar_command(
pp::app::MainToolbarCommand::show_message_box);
if (!plan || plan.value().action != pp::app::MainToolbarAction::show_message_box)
return;
msgbox = new NodeMessageBox();
msgbox->set_manager(&layout);
msgbox->init();
layout[main_id]->add_child(msgbox);
if (plan)
execute_main_toolbar_plan(*this, plan.value());
};
}
if (auto* button = layout[main_id]->find<NodeButtonCustom>("btn-settings"))
@@ -366,12 +426,8 @@ void App::init_toolbar_main()
button->on_click = [this](Node*) {
const auto plan = pp::app::plan_main_toolbar_command(
pp::app::MainToolbarCommand::show_settings);
if (!plan || plan.value().action != pp::app::MainToolbarAction::show_settings_dialog)
return;
settings = new NodeSettings();
settings->set_manager(&layout);
settings->init();
layout[main_id]->add_child(settings);
if (plan)
execute_main_toolbar_plan(*this, plan.value());
};
}
}