Add tools menu service boundary

This commit is contained in:
2026-06-03 12:52:46 +02:00
parent b67f3d63cf
commit ea96f38875
5 changed files with 176 additions and 19 deletions

View File

@@ -376,6 +376,49 @@ private:
App& app_;
};
class LegacyToolsMenuServices final : public pp::app::ToolsMenuServices {
public:
explicit LegacyToolsMenuServices(App& app) noexcept
: app_(app)
{
}
void show_panels_submenu() override
{
}
void show_options_submenu() override
{
}
void clear_grid_overlays() override
{
auto* mode = static_cast<CanvasModeGrid*>(Canvas::modes[(int)kCanvasMode::Grid][0]);
mode->clear();
}
void reset_camera() override
{
if (app_.canvas)
app_.canvas->reset_camera();
}
void show_shortcuts_dialog() override
{
app_.dialog_shortcuts();
}
void start_sonarpen() override
{
#if __IOS__
[app_.ios_app sonarpen_start];
#endif
}
private:
App& app_;
};
void execute_main_toolbar_plan(App& app, const pp::app::MainToolbarPlan& plan)
{
LegacyMainToolbarServices services(app);
@@ -392,6 +435,14 @@ void execute_about_menu_plan(App& app, const pp::app::AboutMenuPlan& plan)
LOG("About menu action failed: %s", status.message);
}
void execute_tools_menu_plan(App& app, const pp::app::ToolsMenuPlan& plan)
{
LegacyToolsMenuServices services(app);
const auto status = pp::app::execute_tools_menu_plan(plan, services);
if (!status.ok())
LOG("Tools menu action failed: %s", status.message);
}
} // namespace
void App::title_update()
@@ -1580,11 +1631,7 @@ void App::init_menu_tools()
popup_exp->find<NodeButtonCustom>("clear-grids")->on_click = [this, popup_exp](Node*) {
const auto plan = pp::app::plan_tools_menu_command(pp::app::ToolsMenuCommand::clear_grids);
if (plan.action == pp::app::ToolsMenuAction::clear_grid_overlays)
{
CanvasModeGrid* mode = (CanvasModeGrid*)Canvas::modes[(int)kCanvasMode::Grid][0];
mode->clear();
}
execute_tools_menu_plan(*this, plan);
if (plan.closes_root_popup)
{
popup_exp->mouse_release();
@@ -1594,8 +1641,7 @@ void App::init_menu_tools()
popup_exp->find<NodeButtonCustom>("camera-reset")->on_click = [this, popup_exp](Node*) {
const auto plan = pp::app::plan_tools_menu_command(pp::app::ToolsMenuCommand::reset_camera);
if (plan.action == pp::app::ToolsMenuAction::reset_camera)
canvas->reset_camera();
execute_tools_menu_plan(*this, plan);
if (plan.closes_root_popup)
{
popup_exp->mouse_release();
@@ -1605,8 +1651,7 @@ void App::init_menu_tools()
popup_exp->find<NodeButtonCustom>("shortcuts")->on_click = [this, popup_exp](Node*) {
const auto plan = pp::app::plan_tools_menu_command(pp::app::ToolsMenuCommand::shortcuts);
if (plan.action == pp::app::ToolsMenuAction::show_shortcuts_dialog)
dialog_shortcuts();
execute_tools_menu_plan(*this, plan);
if (plan.closes_root_popup)
{
popup_exp->mouse_release();
@@ -1625,8 +1670,7 @@ void App::init_menu_tools()
#if __IOS__
popup_exp->find<NodeButtonCustom>("sonarpen")->on_click = [this, popup_exp](Node*) {
const auto plan = pp::app::plan_tools_menu_command(pp::app::ToolsMenuCommand::sonarpen, true);
if (plan.action == pp::app::ToolsMenuAction::start_sonarpen)
[ios_app sonarpen_start];
execute_tools_menu_plan(*this, plan);
if (plan.closes_root_popup)
{
popup_exp->mouse_release();